Автор работы: Пользователь скрыл имя, 20 Августа 2013 в 23:24, дипломная работа
Актуальность моей работы заключается в создании инструмента для разработки приложений, связанных между собой по сети и работающих как единая система.
Сейчас распространена клиент-серверная сетевая архитектура, в которой задания или сетевая нагрузка распределены между поставщиками услуг (сервисов), называемыми серверами, и заказчиками услуг, называемыми клиентами. Нередко клиенты и серверы взаимодействуют через компьютерную сеть и могут быть как различными физическими устройствами, так и программным обеспечением.
Введение 3
Глава 1. Оптимизация приложений 6
1.1 Механизмы оптимизации 6
1.2 Архитектурный принцип построения сетей 9
1.3 Пропускная способность сети 11
1.4 Поток данных 12
1.5 Гибридные сети 20
1.6 Брэндмауэр Windows 22
1.7 Отличие С# от Java 24
1.8 JSON. Передача объектов 36
Глава 2. Программная часть 38
2.1 Среда разработки 38
2.2 Язык программирования 39
2.3 Диаграммы классов 40
2.4 Диаграммы взаимодействия 43
2.5 Алгоритм работы 45
2.6 Интерфейс приложения 47
Заключение 49
Список использованной литературы 50
В C# примитивные типы (byte, int, double, float, bool и пр.) и структуры (struct) передаются по значению (т. н. значимые типы), остальные типы передаются по ссылке (т. н. ссылочные типы). C# также поддерживает явное описание передачи параметров по ссылке (ключевые слова ref и out). При использовании out компилятор контролирует наличие в методе присваивания значения. В Java примитивные типы (численные/boolean) передаются по значению, а для остальных (обьектные) по значению передается ссылка на обьект.
Виртуальность методов:
C# копирует
концепцию виртуальных методов
C++: виртуальный метод должен быть
явно объявлен с ключевым
В Java, наоборот, все открытые методы, кроме статических, являются виртуальными, а переопределить метод так, чтобы механизм виртуальности не включился, невозможно. Метод всегда виртуально перекрывает метод базового класса с теми же именем и сигнатурой, если он есть. Ключевое слово final позволяет запретить создание метода с такой же сигнатурой в производных классах.
Подход
Java синтаксически проще, он гарантирует,
что всегда вызывается метод именно
того класса, к которому относится
объект. С другой стороны, виртуальность
действительно нужна не всегда, а
накладные расходы на вызов виртуальных
методов несколько больше, поскольку
эти вызовы обычно не проходят инлайн-подстановку
и требуют дополнительного
Виртуальность всех методов потенциально небезопасна: если программист по ошибке объявит метод, который уже есть в базовом классе, не имея намерения его перекрывать, а просто не обратив внимания на то, что такой метод уже есть, то новый метод перекроет одноимённый метод в базовом классе, хотя это и не входит в намерения разработчика. В C# подобная ошибка тоже возможна, но компилятор выдаст предупреждение, что перекрывающий метод объявлен без new и override. В Java 5 появился аналогичный механизм — если метод перекрывает виртуальный метод класса-предка, компилятор выдаёт предупреждение; чтобы предупреждение не выдавалось, необходимо отметить перекрывающий метод аннотацией «@Override».
Параметризованные (обобщённые) типы:
В обоих языках типы могут быть параметризованными, что поддерживает парадигму обобщённого программирования. Синтаксически определение типов достаточно близко — в обоих языках оно унаследовано от шаблонов (templates) C++, хотя и с некоторыми модификациями.
Обобщения
типов в Java являются чисто языковой
конструкцией и реализованы лишь
в компиляторе. Компилятор заменяет
все обобщённые типы на их верхние
границы и вставляет
C# пошёл
другим путём. Поддержка
Подход
Java требует дополнительных проверок
во время выполнения, не гарантирует,
что клиент кода будет следовать
соответствию типов, и не обеспечивает
рефлексии для обобщённых типов.
Java не позволяет специализировать обобщённые
типы примитивными (это можно сделать
только заворачивая примитивные
типы в классы), в то время как
C# обеспечивает обобщение как для
ссылочных типов, так и для
типов-значений, включая примитивные.
Вместо этого Java предлагает использование
завёрнутых примитивных типов в
качестве параметров (напр., List<Integer>
вместо List<int>), но это даётся ценой
дополнительного выделения
Пространства имён, сборки, пакеты:
C# использует
пространства имён (namespace), напоминающие
одноимённый механизм C++. Каждый
класс относится к некоторому
пространству имён, те классы, для
которых пространство имён не
указано явно, относятся к безымянному
пространству имён по
В Java имеются пакеты, отчасти похожие на пространства имён C#. Пакеты могут быть вложенными, каждый описываемый класс относится к некоторому пакету, при отсутствии явного указания пакета класс относится к глобальному безымянному пакету.
В обоих
языках для обращения к объекту,
объявленному в другом пространстве
имён или пакете, нужно объявить
в программе требуемый пакет (пространство
имён) как используемый. Обращение
к объекту производится через
квалифицированное имя, в качестве
квалификатора используется имя
пакета (пространства имён). Если требуется
обращение к объекту без
В C# пространства имён никак не связаны с компилированными модулями (сборками, или assembly в терминологии Microsoft). Несколько сборок могут содержать одно и то же пространство имён, в одной сборке может объявляться несколько пространств имён, не обязательно вложенных. Модификаторы области видимости C# никак не связаны с пространствами имён. В Java объявленные в одном пакете классы по умолчанию образуют единый компилированный модуль. Модификатор области видимости по умолчанию (отсутствие явного указания) ограничивает область видимости полей и методов класса пределами пакета.
В Java структура файлов и каталогов исходных текстов пакета по умолчанию связана со структурой пакета — пакету соответствует каталог, входящим в него подпакетам — подкаталоги этого каталога, файлы исходных текстов располагаются в каталогах, соответствующих пакету или подпакету, в который они входят. Таким образом, дерево исходных текстов повторяет структуру пакета. В C# местонахождение файла с исходным текстом никак не связано с его пространством имён.
Расположение исходного текста в файлах:
В C# классы
могут располагаться в файлах
произвольным образом. Имя файла
исходного кода никак не связано
с именами определяемых в нём
классов. Допускается расположить
в одном файле несколько
В Java каждый
файл может содержать только один
общедоступный (public) класс, причём Java требует,
чтобы имя файла совпадало
с именем этого класса, что исключает
путаницу в именах файлов и классов.
Более того, согласно рекомендуемому
Sun соглашению об оформлении кода, размер
файла исходного кода не должен превышать
2000 строк кода, поскольку в файле
большего размера труднее разбираться.
Большой размер файла также считается
признаком плохого
Исключения:
Оба языка
поддерживают механизм обработки исключений,
синтаксически оформленный
Java поддерживает
проверяемые (checked) исключения: программист
должен явно указать для
C# проверяемые
исключения не поддерживает. Их
отсутствие является
Вопрос о пользе проверяемых исключений дискуссионный.
Параллельное программирование:
В целом
механизмы параллельного
В обоих
языках есть возможность создать
синхронно исполняемый блок кода;
в Java это делается с помощью оператора
synchronized(), в C# — оператором lock(). В Java
имеется также возможность
В обоих
языках доступны также идентичные средства
синхронизации, основанные на отправке
и ожидании сигнала от одного потока
к другому (другим). В Java это методы
notify(), notifyAll() и wait(), в C# — методы Pulse(),
PulseAll(), Wait() (тройки методов функционально
попарно аналогичны). Различие состоит
лишь в том, что в Java эти методы
(и, соответственно, функциональность
монитора) реализуется в классе Object,
поэтому для синхронизации не
требуется никаких
Исходя из всего вышеперечисленного для программирования приложений под windows мною был выбран язык C#. Я считаю, что он наиболее подходит для реализации поставленных задач.
JSON изначально разрабатывался для удобной передачи объектов. В моем клиенте он для этого и используется. Т.к. в .NET все представлено объектами, то чтобы не писать свой парсер принимаемых данных, задача по сериализации\десериализации объектов переложена на JSON.
JSON (JavaScript Object Notation) - простой формат обмена данными, удобный для чтения и написания как человеком, так и компьютером. Он основан на подмножестве языка программирования JavaScript, определенного в стандарте ECMA-262 3rd Edition - December 1999. JSON - текстовый формат, полностью независимый от языка реализации, но он использует соглашения, знакомые программистам C-подобных языков, таких как C, C++, C#, Java, JavaScript, Perl, Python и многих других. Эти свойства делают JSON идеальным языком обмена данными.
Коллекция пар ключ/значение. В разных языках, эта концепция реализована как объект, запись, структура, словарь, хэш, именованный список или ассоциативный массив.
Информация о работе Программа по оптимизации передачи данных через сервер