Аналітичній огляд чат-програм

ВСТУП

Тема дипломного проекту є актуальною, оскільки розробка та реалізація клієнтно-серверної чат-програми для роботи в мережі є сучасною.

Слід зауважити, що чат-програма – це мережевий засіб для швидкого обміну текстовими повідомленнями між користувачами інтернету у режимі реального часу. Крім текстових повідомлень, чат-програма має можливість передавати медіа-файли: зображення або фотографії, аудіо-відео файли. Дана програма буде реалізована для операційної системи Андроїд, тому користувач буде встановлювати її на свій смартфон з даною ОС.

Поняття “клієнт-сервер” – це архітектура, яка є одним із архітектурних шаблонів програмного забезпечення та є домінуючою концепцією у створенні розподілених мережних застосунків і передбачає взаємодію та обмін даними між ними. Вона передбачає такі основні компоненти: набір серверів, які надають інформацію або інші послуги програмам, які звертаються до них; набір клієнтів, які використовують сервіси, що надаються серверами; мережа, яка забезпечує взаємодію між клієнтами та серверами.
Сервером буде виступати смартфон, до якого будуть підключатись інші клієнти. Клієнти функціонують паралельно і незалежно один від одного. Немає жорсткої прив'язки клієнтів до серверів. Більш ніж типовою є ситуація, коли один сервер одночасно обробляє запити від різних клієнтів; клієнти мають знати про доступні сервери, але можуть не мати жодного уявлення про існування інших клієнтів.

Основні завдання роботи: 1) розробити чат-програму, що має запускатись на смартфоні, який виступає в ролі сервера; 2) розробити систему сполучення з іншими користувачами, які зможуть передавати повідомлення один-одному, кожен клієнт може перевірятись сервером за фізичним адресом пристрою, який в кожного унікальний; 3) зменшити число помилок при роботі з великою кількістю клієнтів.

ЗАГАЛЬНИЙ РОЗДІЛ

Аналітичній огляд чат-програм

Коли інтернет набирав свого поширення серед користувачів, виникла необхідність передачі інформації між людьми. Спеціалісти почали створювати програмне забезпечення, функції якого були направлені на те, щоб люди змогли спілкуватись в мережі інтернет. Спочатку це були електронні пошти, куди повідомлення, відправлене з одного ящику, через довгий час приходило на інший. Електронні пошти постійно поліпшувались та час відправлення та отримання листа зменшувався. З’являлися нові функції, крім текстового повідомлення: відправка невеликого розміру зображень. Крім невеликих зображень електронні пошти не могли передавати великі медіа-файли тому, що на сей момент користувачі мали інтернет з досить маленькою швидкістю та великими тарифами на трафік. Отже, це було б дорогим задоволенням.
Найпоширенішим поштовим сервісом був Outlook Express — програма для роботи з електронною поштою і групами новин від компанії Microsoft. Outlook Express поставляється у складі операційних систем Windows починаючи з Windows 95 OSR 2.5, Windows NT, а також разом з браузером Internet Explorer починаючи з версії 4.0. Існують також варіанти Outlook Express для «класичних» версій Mac OS.

Назва Outlook Express натякає, що ця програма є «полегшеною» версією Microsoft Outlook — органайзера від Майкрософту, який також містить функції роботи з електронною поштою. Насправді між цими двома програмами мало спільного. Крім того, Outlook, на відміну від Outlook Express, не має функцій для роботи не тільки з одим повідомленням, а і з групою новин.

З часом, технологія інтернету модернізувалась, швидкість його була збільшена, користувачі мали нові можливості. Спеціалісти шукали спосіб передавати інформацію на великі відстані у реальному часі.
Так з’явилися перші чат-програми.

Чат – це корисна мережева можливість передавати повідомлення у реальному часі. Чат може бути декількох видів: програмним – тобто реалізований у виді програмного забезпечення для комп’ютерів, планшетів, телефонів. Такі чати мають можливість передавати великі медіа-файли. Найпоширенішим серед користувачів була програма ICQ, яка працює на своєму протоколі. ICQ (укр. АйСіК'ю) — мережевий протокол, який забезпечує миттєве відправлення та отримання текстових повідомлень, а також однойменна програма миттєвого обміну повідомленнями (клієнт), що реалізує цей протокол. Назва «ICQ» фонетично співзвучна англійській фразі «I seek you» (я шукаю тебе, вимовляється ай-сік-ю́).

ICQ розроблена ізраїльською компанією Mirabilis. Перша версія програми вийшла в листопаді 1996 року. У червні 1998 AOL придбала активи Mirabilis, основним з яких був ICQ, але ця служба не стала рентабельною. У квітні 2010 року російський фонд Digital Sky Technologies (DST, пізніше перейменований на Mail.ru Group) купив сервіс ICQ у компанії AOL за $187,5 млн.

З часом більшої популярності набрала програма Skype, яка має більший функціонал ніж ICQ, ліпший інтерфейс для користувача, та є програмою для різних платформ. Skype (укр. Скайп) — це власницьке ПЗ для інтернет-телефонії VoIP, створене двома підприємцями Нікласом Зеннстрьомом та Янусом Фріїсом, також засновниками файлообмінної мережі Kazaa. Вона конкурує з існуючими відкритими VoIP

протоколами, такими як SIP, IAX, та H.323. Група Skype, придбана eBay в жовтні 2005, розміщена в Люксембурзі, з офісами в Лондоні, Таллінні і Празі. 2009 eBay продала більшу частину акцій Skype групі інвестиційних фондів. Від 2011 власником Skype є Microsoft.

Skype після випуску почав дуже швидко зростати у всіх напрямках: за популярністю, в розробці програмного забезпечення, в обох — безплатних та платних сервісах. Комунікаційна система Skype відома завдяки широкому спектру її особливостей, зокрема безкоштовній голосовій та відео-конференції, та завдяки її здатності використовувати децентралізовану peer-to-peer технологію для подолання звичайних проблем з брандмауером та NAT (Network Adress Translation).

За даними дослідницької компанії TeleGeography, 2008 року Skype став найбільшим оператором міжнародного голосового зв'язку — його частка від загального обсягу розмов склала 8%. Станом на 2011 рік щомісячно Skype користуються до 140 мільйонів людей по всьому світу.
Є інші чат-програми, але вони або створені на базі двох вище описаних чи вони не мають великої уваги серед користувачів..

Веб-чати – це чати, які розміщені на веб-сторінці, що для виводу інформації оновлюється з заданою періодичністю; Таких чатів в мережі велика кількість. Ці чати діляться на державні, регіональні, тематичні.. Є багато веб-чатів для підлітків з графічними персонажами, наприклад Murclub.ru. Цей веб-чат є дуже популярним серед підлітків СНД. Можливість спілкування в реальному часі інтегрована в соціальних мережах: Facebook, Vkontakte, Odnoklassniki, Twitter, MySpace, Connect.ua та ін. Чати на IRC — спеціалізований протокол для чатів. IRC (англ. Internet Relay Chat) — сервіс Інтернет, який надає користувачам можливість спілкування шляхом надсилання текстових повідомлень багатьом людям з усього світу одночасно (в режимі реального часу). Аналогію можна знайти у радіо на коротких хвилях, навіть використовується аналогічне поняття англ. channel (канал, хвиля);

Мова програмування

Для того, щоб створити свій дипломний проект, мені потрібно проаналізувати і обрати мову програмування, з якою я буду працювати. Мов програмування існує дуже велика кількість, але є основі, які поширені серед програмістів у світі, а саме: C++, C#, Java, Delphi. C# та Java є похідними від C++, вони засновані на принципах С++. Почнемо з самого початку описувати кожну мову програмування:

1. C++ (Сі-плюс-плюс) — мова програмування високого рівня з підтримкою декількох парадигм програмування: об'єктно-орієнтованої, узагальненої та процедурної. Розроблена Б'ярном Страуструпом (англ. Bjarne Stroustrup) в AT&T Bell Laboratories (Мюррей-Хілл, Нью-Джерсі) у 1979 році та початково отримала назву «Сі з класами». Згодом Страуструп перейменував мову у C++ у 1983 р. Базується на мові С. Визначена стандартом ISO/IEC 14882:2003.

У 1990-х роках С++ стала однією з найуживаніших мов програмування загального призначення. Мову використовують для системного програмування, розробки програмного забезпечення, написання драйверів, потужних серверних та клієнтських програм, а також для розробки розважальних програм таких як відео ігри. С++ суттєво вплинула на інші, популярні сьогодні, мови програмування: С# та Java.

Особливості:
1) підтримка об'єктно-орієнтованого програмування через класи;
2 ) підтримка узагальненого програмування через шаблони;
3) доповнення до стандартної бібліотеки;
4) додаткові типи даних;
5) обробка винятків;

6) простори імен;
7) вбудовані функції;
8) перевантаження операторів;
9) перевантаження імен функцій;
10) посилання і оператори управління вільно розподіленою пам'яттю.

Приклад програми:
#include <iostream>

using namespace std;

int main() {

int age; //Змінна для запису віку

cout << "How old are You?\n"; //Скільки вам років?

cin >> age; //Треба вказати вік

cout << "You are " << age << "years old\n"; //Результат

return 0;

}

Переваги та недоліки:
Переваги мови C++

Швидкодія. Швидкість роботи програм на С++ практично не поступається програмам на С, хоча програмісти отримали в свої руки нові можливості і нові засоби.

Масштабованість. На мові C++ розробляють програми для найрізноманітніших платформ і систем.

Можливість роботи на низькому рівні з пам'яттю, адресами, портами. (Що, при необережному використанні, може легко перетворитися на недолік.)

Можливість створення узагальнених алгоритмів для різних типів даних, їхня спеціалізація, і обчислення на етапі компіляції, з

використанням шаблонів.

Підтримуються різні стилі та технології програмування, включаючи традиційне директивне програмування, ООП, узагальнене програмування, метапрограмування (шаблони, макроси).

Недоліки мови C++

Наявність безлічі можливостей, що порушують принципи типобезпеки приводить до того, що в С++ програми може легко закрастися важковловима помилка. Замість контролю з боку компілятора розробники вимушені дотримуватися вельми нетривіальних правил кодування. По суті, ці правила обмежують С++ рамками якоїсь безпечнішої підмови. Більшість проблем типобезпеки С++ успадкована від С, але важливу роль в цьому питанні грає і відмова автора мови від ідеї використовувати автоматичне управління пам'яттю (наприклад, збірку сміття). Так візитною карткою С++ стали вразливості типу «переповнювання буфера».

Погана підтримка модульності. Підключення інтерфейсу зовнішнього модуля через препроцесорну вставку заголовного файлу (#include) серйозно уповільнює компіляцію, при підключенні великої кількості модулів. Для усунення цього недоліку, багато компіляторів реалізують механізм прекомпіляції заголовних файлів (англ. Precompiled Headers).

Недостача інформації про типи даних під час компіляції (CTTI).

Мова C++ є складною для вивчення і для компіляції.

Деякі перетворення типів неінтуїтивні. Зокрема, операція над без знаковим і знаковим числами видає без знаковий результат.

Препроцесор С++ (успадкований від C) дуже примітивний. Це приводить з одного боку до того, що з його допомогою не можна (або важко) здійснювати деякі завдання метапрограмування, а з іншою, в наслідку своєї примітивності, він часто приводить до помилок і вимагає багато дій з обходу потенційних проблем. Деякі мови програмування (наприклад, Scheme і Nemerle) мають набагато могутніші і безпечніші системи метапрограмування (також звані макросами, але макроси С/С++ вони мало нагадують).

З кінця 1990-х в співтоваристві С++ набуло поширення так зване метапрограмування на базі шаблонів. По суті, воно використовує особливості шаблонів C++ в цілях реалізації на їхній базі інтерпретатора примітивної функціональної мови програмування, що виконується під час компіляції. Сама по собі ця можливість вельми приваблива, але, внаслідкок вище згаданого, такий код вельми важко сприймати і зневаджувати. Мови Lisp/Scheme, Nemerle і деякі інші мають могутніші і водночас простіші для сприйняття підсистеми метапрограмування. Крім того, в мові D реалізована порівнянна за потужністю, але значно простіша в застосуванні підсистема шаблонного метапрограмування.

Хоча декларується, що С++ мультипарадигмена мова, реально в мові відсутня підтримка функціонального програмування. Частково, даний пропуск усувається різними бібліотеками (Loki, Boost) що використовують засоби метапрограмування для розширення мови функціональними конструкціями (наприклад, підтримкою лямбд/анонімних методів), але якість подібних рішень значно поступається якості вбудованих у функціональні мови рішень. Такі можливості функціональних мов, як зіставлення зі зразком взагалі украй складно емулювати засобами метапрограмування.

2. C# (вимовляється Сі-шарп) — об'єктно-орієнтована мова програмування з безпечною системою типізації для платформи .NET. Розроблена Андерсом Гейлсбергом, Скотом Вілтамутом та Пітером Гольде під егідою Microsoft Research (при фірмі Microsoft).

Синтаксис C# близький до С++ і Java. Мова має строгу статичну типізацію, підтримує поліморфізм, перевантаження операторів, вказівники на функції-члени класів, атрибути, події, властивості, винятки, коментарі у форматі XML. Перейнявши багато що від своїх попередників — мов С++, Delphi, Модула і Smalltalk — С#, спираючись на практику їхнього використання, виключає деякі моделі, що зарекомендували себе як проблематичні при розробці програмних систем, наприклад множинне спадкування класів (на відміну від C++).

Особливості мови: C# розроблялась як мова програмування прикладного рівня для CLR і тому вона залежить, перш за все, від можливостей самої CLR. Це стосується, перш за все, системи типів C#. Присутність або відсутність тих або інших виразних особливостей мови диктується тим, чи може конкретна мовна особливість бути трансльована у відповідні конструкції CLR. Так, з розвитком CLR від версії 1.1 до 2.0 значно збагатився і сам C#; подібної взаємодії слід чекати і надалі. (Проте ця закономірність буде порушена з виходом C# 3.0, що є розширеннями мови, що не спираються на розширення платформи .NET.) CLR надає C#, як і всім іншим .NET-орієнтованим мовам, багато можливостей, яких позбавлені «класичні» мови програмування. Наприклад, збірка сміття не реалізована в самому C#, а проводиться CLR для програм, написаних на C# точно так, як і це робиться для програм на VB.NET, J# тощо.

Приклад:
using System;

class ExampleClass

{

static void Main()

{

Console.WriteLine("Hello, world!");

Console.ReadKey(); }}

3.Object Pascal — об'єктно-орієнтована мова програмування, нащадок Pascal, більш відома як основна мова програмування середовища Delphi. В 1986 році фірма Apple розробила об'єктне розширення мови програмування Pascal, яке стало називатися Object Pascal. В 1989 році компанія Borland внесла аналогічні зміни в систему Turbo Pascal 5.5, яка з цього моменту стає об'єктно-орієнтованою. З часом, в мову програмування Turbo Pascal вносяться нові зміни, що розширюють її об'єктно-орієнтовані можливості. В 1995 році на ринку з'являється Borland Delphi 1.0, мовою програмування якої стає Object Pascal на базі Turbo Pascal. Ця назва використовується і в наступних версіях Borland Delphi. Проте, з часом, сторонні розробники починають викориcтовувати цю назву для найменування власних версій Pascal. В 2001 році, в Delphi 6.0, компанія Borland відмовляється від назви Object Pascal і називає мову програмування, що використовується в Borland Delphi, мовою програмування Delphi.

Приклади програми:

program ObjectPascalExample;

type

THelloWorld = class

procedure Put;

end;

procedure THelloWorld.Put;

begin

Writeln('Hello, World!');

end;

var

HelloWorld: THelloWorld;

begin

HelloWorld := THelloWorld.Create;

HelloWorld.Put;

HelloWorld.Free;

end.

4.Java (вимовляється Джава; інколи — Ява) — об'єктно-орієнтована мова програмування, випущена компанією Sun Microsystems у 1995 році як основний компонент платформи Java. Зараз мовою займається компанія Oracle, яка придбала Sun Microsystems у 2009 році. Синтаксис мови багато в чому походить від C та C++. У офіційній реалізації, Java програми компілюються у байткод, який при виконанні інтерпретується віртуальною машиною для конкретної платформи.

Oracle надає компілятор Java та віртуальну машину Java, які задовольняють специфікації Java Community Process, під ліцензією GNU General Public License.

Мова значно запозичила синтаксис із C і C++. Зокрема, взято за основу об'єктну модель С++, проте її модифіковано. Усунуто можливість появи деяких конфліктних ситуацій, що могли виникнути через помилки програміста та полегшено сам процес розробки об'єктно-орієнтованих програм. Ряд дій, які в С/C++ повинні здійснювати програмісти, доручено віртуальній машині. Передусім, Java розроблялась як платформо-незалежна мова, тому вона має менше низькорівневих можливостей для роботи з апаратним забезпеченням. За необхідності таких дій java дозволяє викликати підпрограми, написані іншими мовами програмування.

Java вплинула на розвиток J++, що розроблялась компанією Microsoft. Роботу над J++ було зупинено через судовий позов компанії Sun Microsystems, оскільки ця мова програмування була модифікацією Java. Пізніше в новій платформі Microsoft .NET випустило J#, щоб полегшити міграцію програмістів J++ або Java на нову платформу. З часом нова мова програмування С#, стала основною мовою платформи, перейнявши багато чого з Java. J# востаннє включався в версію Microsoft Visual Studio 2005. Мова сценаріїв JavaScript має схожу із Java назву і синтаксис, але не пов'язана із Java.

Мова програмування Java зародилася в 1991 р. в лабораторіях компанії Sun Microsystems. Розробку проекту започаткував Джеймс Ґослінґ, сам проект мав назву «Green»(Зелений). Створення першої робочої версії, яка мала назву «Oak»(дуб), зайняло 18 місяців. Оскільки виявилось, що ім'я Oak уже використовувалось іншою фірмою, то в результаті тривалих суперечок навколо назви нової мови з поміж ряду запропонованих було вибрано назву Java, у 1995 р. мову було офіційно перейменовано.

Головним мотивом створення Java була потреба в мові програмування, яка б не залежала від платформи (тобто від архітектури) і яку можна було б використовувати для створення програмного забезпечення, яке вбудовується в різноманітні побутові електронні прилади, такі як мобільні засоби зв'язку, пристрої дистанційного керування тощо.

Досить скоро майже всі найпопулярніші тогочасні веб-оглядачі отримали можливість запускати «безпечні» для системи Java аплети всередині веб-сторінок. У грудні 1998 р. Sun Microsystems випустила Java 2 (спершу під назвою J2SE 1.2), де було реалізовано декілька конфігурацій для різних типів платформ. Наприклад, J2EE призначалася для створення корпоративних застосунків, а значно урізана J2ME для приладів з обмеженими ресурсами, таких як мобільні телефони. У 2006 році в маркетингових цілях, Версії J2 було перейменовано у Java EE, Java ME та Java SE, відповідно. 13 листопада 2006 року Sun випустили більшу частину Java в якості вільного та відкритого програмного забезпечення згідно з умовами GNU General Public License (GPL). 8 травня 2007 корпорація закінчила процес, в результаті якого всі початкові коди Java були випущенні під GPL, за винятком невеликої частини коду, на який Sun не мала авторського права.

Період становлення Java збігся у часі з розквітом міжнародної інформаційної служби World Wide Web. Ця обставина відіграла вирішальну роль у майбутньому Java, оскільки Web теж вимагала платформо-незалежних програм. Як наслідок, були зміщені акценти в розробці Sun з побутової електроніки на програмування для Інтернет.

Об'єктність

На противагу C++, Java об'єктно-орієнтованіша. Всі дані і дії групуються в класи об'єктів. Виключенням з повної об'єктності (як скажімо в Smalltalk) є примітивні типи (int, float тощо). Це було свідомим рішенням проектувальників мови задля збільшення швидкості. Через це, Java не вважається повністю об'єктно-орієнтовною мовою.

У Java всі об'єкти є похідними від головного об'єкта (він називається просто Object), з якого вони успадковують базову поведінку і властивості.

Хоча у C++ вперше стало доступне множинне успадкування, але у Java можливе тільки одинарне успадкування, завдяки чому виключається можливість конфліктів між членами класу (методи і змінні), які успадковуються від базових класів.

У намірах проектувальників Java мала замінити C++ — об'єктного наступника мови C. Проектувальники почали з аналізу властивостей C++, які є причиною найбільшого числа помилок, щоби створити просту, безпечну і безвідмовну мову програмування.

В Java існує система винятків або ситуацій, коли програма зустрічається з неочікуваними труднощами, наприклад:

a) операції над елементом масиву поза його межами або над порожнім елементом;

б) читання з недоступного каталогу або неправильної адреси URL;

в) ввід недопустимих даних користувачем.

Одна з особливостей концепції віртуальної машини полягає в тому, що помилки (виключення) не призводять до повного краху системи. Крім того, існують інструменти, які «приєднуються» до середовища періоду виконання і кожен раз, коли сталося певне виключення, записують інформацію з пам'яті для відлагодження програми. Ці інструменти автоматизованої обробки виключень надають основну інформацію щодо виключень в програмах на Java.

Проте, мову програмування Java не рекомендується використовувати в системах, збій в роботі яких може призвести до смерті, травм чи значних фізичних ушкоджень (наприклад, програмне забезпечення для керування атомними електростанціями, польотами, систем життєзабезпечення чи систем озброєння) через ненадійність програм, написаних на мові програмування Java, пункт ліцензії Microsoft 7.7.h.

Java використовує автоматичний збирач сміття для керування пам'яттю під час життєвого циклу об'єкта. Програміст вирішує, коли створювати об'єкти, а віртуальна машина відповідальна за звільнення пам'яті після того, як об'єкт стає непотрібним. Коли до певного об'єкта вже не залишається посилань, збирач сміття може автоматично прибирати його із пам'яті. Проте, витік пам'яті все ж може статися, якщо код, написаний програмістом, має посилання на вже непотрібні об'єкти, наприклад на об'єкти, що зберігаються у діючих контейнерах.

Прибирання сміття дозволене у будь-який час. В ідеалі воно відбувається під час бездіяльності програми. Збірка сміття автоматично форсується при нестачі вільної пам'яті в купі для розміщення нового об'єкта, що може призводити до кількасекундного зависання. Тому існують реалізації віртуальної машини Java з прибиральником сміття спеціально створеним для програмування систем реального часу. Java не має підтримки вказівників у стилі C/C++. Це зроблено задля безпеки й надійності, аби дозволити збирачу сміття переміщувати вказівникові об'єкти.

Наши рекомендации