Our company will provide you best solutions based on Java.
Why Java is such a good solution ?
There are many advantages of Java but the main is independence from the platform of your server. In other words the same programm can work on servers with Windows, Solaris, Linux, Machintosh or any other server with different OS.
It is crusiallly important when programs can be downloaded by user from internet and run from the servers or other machines where variable Operational Systems can be set up.
Main advantages of Java
There are 11 main advantages of using Java in software development.
Simple
OOP (Object-Oriented Programming)
Balanced
Reliable
Safe
Doesn't depend on architecture of PC's
Doesn't depend on hardware of PC's
Interpreting
High productive
Многопоточный
Dinamic
Simple
Java was developed as a system which is easy to transform and doesn't need any additional knowledge to use, but use existing standarts in software developing.
Другой аспект простоты - краткость. Одна из целей языка Java - обеспе¬чить разработку программ, которые можно было бы совершенно само¬стоятельно выполнять на небольших машинах. Размер основного интер¬претатора и средств поддержки классов составляет около 40 Кбайт; стандартные библиотеки и средства поддержки потоков (особенно авто¬номное микроядро (self-contained microkernel)) занимают еще 175 Кбайт.
Это огромный успех. Заметим, однако, что библиотеки средств поддержки графи¬ческого пользовательского интерфейса значительно крупнее.
Объектно-ориентированный
Попросту говоря, объектно-ориентированное программирование –это метод программирования, в центре внимания которого находятся данные (т.е. объекты) и средства доступа к ним. Проводя аналогию со столярным делом, можно сказать, что «объектноориентированный» мастер в основном сосредоточен на стуле, который он изготавливает, и лишь во вторую очередь его интересуют инструменты, необходимые для этого; в то же время "не объектно-ориентированный " столяр думает лишь о своих инструментах. Объектно-ориентированные свойства языков Java и С++ по существу, совпадают.
Объектная ориентация за прошедшие 30 лет уже доказала свою ценность и без нее невозможно представить себе современный язык программирования. Детально, объектно-ориентированные особенности языка Java сравнимы с язи! Основное различие между ними заключается в механизме множественного наследования, для которого в языке Java найдено лучшее решение, а также в модели классов языка Java. Механизмы отражения и сериализации позволяют реализовать устойчивые объекты и средства для физических пользовательских интерфейсов на основе готовых компонентов.
Распределенный
Язык Java обладает большой библиотекой программ для передачи данных на основе таких протоколов TCP/IP (Transmission Control Protocol/Internet Protocol-протокол управления передачей/Интернет-протокол), как HTTP (Hypertext Transfer Protocol-протокол передачи гипертекстов) ими FTP (File Transfer Protocol-протокол передачи файлов). Приложения, написанные на языке Java, могут открывать объекты и получать к ним доступ через сеть с помощью URL-адресов (Uniform Resource Location - универсальный адрес ре¬сурса) так, же легко, как и в локальной сети.
Язык Java предоставляет мощные и удобные средства для работы в сети, кто когда-либо пытался писать программы для работы в Интернет на другая будет приятно удивлен тем, как легко решаются на языке Java самые трудные например, открытие сетевых соединений (sockets connection). Элегантный механизм состоящий из так называемых сервлетов (servlets), делает работу на сервере чрезвычайно эффективной. Сервлеты поддерживаются многими web-серверами. (Работа в сети будет описана во втором томе.) Связь между распределенными объектами в языке Java обеспечивается механизмом вызова удаленных методов (эта тема также раскрывается во втором томе).
Надежный
Язык Java предназначен для создания программ, которые должны надежно работать в любых ситуациях. Основное внимание в языке Java уделяется раннему обнаружению возможных ошибок, динамической проверке (во время выполнения программы), а также исключению ситуаций, подверженных ошибкам... Единственное значительное отличие языка Java от языка С++ заключается в модели указателей, принятой в языке Java, которая исклю¬чает возможность перезаписи участка памяти и повреждения данных.
ЭТО СВОЙСТВО также очень полезно. Компилятор языка Java выявляет такие ошиб¬ки, которые в других языках обнаруживаются только на этапе выполнения програм¬мы. Кроме того, программисты, потратившие многие часы на поиски ошибки, вы¬звавшей повреждение памяти из-за неверного указателя, будут очень рады тому, что в языке Java такие проблемы возникнуть а принципа не могут.
Если раньше вы программировали на языках Visual Basic иди COBOL, а которых указатели явно не используются, возможно, вам непонятно, почему это настолько важно. Программистам на языке С повезло намного меньше. Им нужны указатели для доступа к строкам, массивам, объектам и даже файлам. При программировании на языке Visual Basic ничего этого не требуется, и программист может не беспокоиться о распределении памяти для этих сущностей. С другой стороны, многие структуры дан¬ных в языке, не имеющем указателей, реализовать очень трудно. Для обычных струк¬тур, вроде строк и массивов, указатели не нужны. Вся мощь указателей проявляется лишь там, где без них нельзя обойтись, например, при создании связанных списков. Программист на языке Java навсегда избавлен от неверных указателей, неправильно¬го распределения и утечки памяти.
Безопасный
Язык Java предназначен для использования в сетевой или распределенной среде. По этой причине большое внимание было уделено безопасности. Язык Java позволяет создавать системы, защищенные от вирусов и по¬стороннего вмешателъства.
В первом издании мы написали: "Никогда не говори никогда, — и оказались правы. Группа экспертов по вопросам безопасности из Принстонского университета обнаружила первые ошибки в системе защиты версии Java 1.0 вскоре после появления в продаже пер¬вой версии набора инструментальных средств JDK. Более того, и они, и другие специали¬сты продолжали и впоследствии находить все новые и новые ошибки в механизмах безо¬пасности всех последующих версий языка Java. Мнения независимых экспертов о совре¬менных механизмах безопасности, предусмотренных в языке Java, можно найти по URL-адресу Принстонской группы (http: //www.es .princeton.edu/aip/), а также на Web-странице соmp.risks. Положительной стороной этой ситуации является то, что группа разработчиков языка Java заявила о своей полной нетерпимости к любым ошибкам в сис¬теме защиты и немедленно приступила к исправлению всех проблем, обнаруженных в ме¬ханизме безопасности аплетов. В частности, опубликовав внутренние спецификации ин¬терпретатора языка Java, компания Sun намного облегчила поиск скрытых ошибок в сис¬теме безопасности и привлекла к их поиску независимых специалистов. Это повысило вероятность того, что все ошибки в системе защиты будут вскоре обнаружены. В любом случае обмануть систему защиты языка Java чрезвычайно трудно. Обнаруженные до сих пор ошибки были почти неуловимыми, к тому же их количество (относительно) невелико.
Web-страница компании Sun, посвященная вопросам безопасности, имеет сле¬дующий URL-адрес: http: //Java. sun. com/sf aq/.
Перечислим некоторые ситуации, возникновение которых предотвращает система безопасности языка Java.
1. Переполнение стека выполняемой программы, к которому приводил печально известный Червь, распространявшийся в Интернет.
2. Повреждение участков памяти, находящихся за пределами пространства, выделенного процессу.
3. Считывание и запись локальных файлов при использовании безопасного загрузчика классов, например Web-броузера, который запрещает такой доступ к файлам.
Все эти меры безопасности вполне уместны и обычно работают безупречно, однако осмотрительность никогда не повредит. Хотя обнаруженные к данному моменту ошиб¬ки были далеко не тривиальными, и все детали их поиска часто хранятся в секрете, следует признать, что доказать безопасность языка Java, вероятно, все же невозможно.
Со временем в язык были добавлены новые средства защиты. Начиная с версии 1.1, в языке Java появилось понятие классов с цифровой подписью. Пользуясь классом с цифровой подписью, вы можете быть уверенным в его авторе. Если вы ему доверяете, то можете предоставить этому классу все привилегии, доступные на вашей машине.
Альтернативный механизм доставки кода, предложенный компанией Microsoft, опирается на технологию ActiveX и для безопасности использует только цифровые подписи. Очевидно, что этого недостаточно — любой пользователь программной обеспечения фирмы Microsoft может подтвердить, что программы широко известных производителей часто завершаются аварийно, создавая тем самым опасность повреждения данных. Система безопасности в языке Java намного надежнее, чем технология ActiveX, поскольку она контролирует приложение с момента его запуска и не позволяет ему причинять ущерб.
Не зависящий от архитектуры
Компилятор генерирует объектный файл, формат которого не зависит от архитектуры компьютера,— скомпилированная программа может вы¬полняться на любых процессорах под управлением системы выполнения про¬грамм языка Java. Для этого компилятор языка Java генерирует команды байт-кода, независящие от конкретной архитектуры компьютера. Байт-код разработан таким образом, чтобы на любой машине его можно было легко интерпретировать либо на лету перевести в машинозависимый код.
Это не новая идея. Более 20 лет назад и в системе реализации языка Pascal, разра¬ботанной Никлаусом Виртом (Niclaus Wirth), и в системе UCSD Pascal применялась та же самая технология. Использование байт-кодов дает большой выигрыш яри выпол¬нении программы (правда, синхронная компиляция во многих случаях его компенси¬рует). Разработчики языка Java прекрасно справились с разработкой набора команд байт-кода, которые отлично работают на большинстве современных компьютеров, легко транслируясь в реальные машинные команды.
Машинонезависимый
В отличие от языков С и С++, в спецификации Java нет аспектов, зави¬сящих от системы реализации. И размер основных типов данных, и
арифметические операции над ними точно определены.
Например, тип int в языке Java всегда означает 32-разрядное целое число. В языках С и С++ тип int может означать как 16-разрядное, так и 32-разрядное целое число, а также целое число произвольного размера, по выбору разработчика кон¬кретного компилятора. Единственное ограничение заключается в том, что размер типа int не может быть меньше размера типа short int и больше размера типа long int. Фиксированный размер числовых типов позволяет избежать многих не¬приятностей, связанных с выполнением программ на разных компьютерах. Бинар¬ные данные хранятся и передаются в фиксированном формате, что также позволя¬ет избежать недоразумений, связанных с разным порядком записи байтов на раз¬ных платформах (конфликт "big endian/little endian"). Строки сохраняются в стандартном формате Unicode.
Библиотеки, представляющие собой часть системы, определяют машино¬независимый интерфейс. Например, в языке предусмотрен абстрактный класс Window и его реализации для операционных систем Unix, Windows
и Macintosh.
Каждый, кто когда-либо пытался написать программу, которая одинаково хорошо работала бы под управлением операционных систем Windows, Macintosh и десяти разновидностей системы Unix, знает, что это очень трудная задача. Версия Java 1.0 предприняла героическую попытку решить эту проблему, предоставив простой инст¬рументальный набор, адаптирующий обычные элементы пользовательского интер¬фейса к большому количеству программных платформ. К сожалению, библиотека, на которую было затрачено немало труда, не позволила достичь приемлемых результа¬тов на разных платформах. (При этом на разных платформах в графических про¬граммах проявлялись разные ошибки.) Однако это было лишь началом. Во многих приложениях машинная независимость намного важнее изысканности графического пользовательского интерфейса. Именно эти приложения выиграли от появления версии Java 1.0. Однако теперь инструментальный набор для создания графического пользовательского интерфейса полностью переработан и больше не зависит от ин¬терфейса пользователя на главном компьютере. Новая версия более осмысленна и, по нашему мнению, более привлекательна для пользователя, чем предыдущие.
Интерпретируемый
Интерпретатор языка Java может пересылаться на любую машину и выполнять байт-код непосредственно на ней. Поскольку редактирование связей - более легкий процесс, разработка программ может стать намного
быстрее и эффективнее.
Возможно, это дает преимущество при разработке приложений, однако приве¬денная цитата — явное преувеличение. В любом случае компилятор языка Java, вхо¬дящий в набор инструментальных средств JSDK (Java Software Development Kit), рабо¬тает довольно медленно. (Некоторые компиляторы, принадлежащие к третьей раз¬новидности, например, компиляторы компании IBM, работают намного быстрее.) Скорость перекомпиляции— это всего лишь один из факторов, характеризующих эффективность среды программирования. Сравнив скорость работы сред програм¬мирования на языке Java и языке Visual Basic, вы, возможно, будете разочарованы.
Высокопроизводительный
Хотя обычно интерпретируемые байт-коды имеют более чем достаточ¬ную производительность, бывают ситуации, в которых требуется еще бо¬лее высокая эффективность. Байт-коды можно "на лету" (во время вы¬полнения) транслировать в машинные коды для конкретного процессора,на котором выполняется данное приложение.
Если для выполнения байт-кодов применяется интерпретатор, не следует упот¬реблять словосочетание "высокая производительность". Однако на многих платфор¬мах возможен другой вид компиляции, обеспечиваемый синхронными компилятора¬ми (just-in-time compilers—JIT). Они транслируют байт-код в машинозависимый код, сохраняют результат в памяти, а затем вызывают его при необходимости. Поскольку при этом интерпретация выполняется только один раз, этот подход во много раз увеличивает скорость работы. Несмотря на то что синхронные компиляторы все равно медлительнее, чем машинозависимые компиляторы, они во всяком случае работают намного быстрее интерпретаторов, обеспечивая для некоторых программ 10- и даже 20-кратное ускорение. Эта технология постоянно совершенствуется и в конце концов может достичь той скорости, которую никогда не превзойдут традиционные компи¬ляторы. Например, синхронный компилятор может определить, какой фрагмент ко¬да выполняется чаще, и оптимизировать его по скорости выполнения.
МНОГОПОТОЧНЫЙ
Многопоточность обеспечивает лучшую интерактивность и выполнение программы.
Если вы когда-либо пытались организовать многопоточные вычисления на каком-нибудь еще языке программирования, вы будете приятно удивлены тем9 как это легко сделать на языке Java. Потоки в языке Java могут использовать преимущества много-1 процессорных систем, если операционная система позволяет это сделать. К сожале¬нию, реализации потоков на большинстве платформ сильно отличаются друг от дру¬га, а разработчики языка Java не предпринимают никаких попыток достичь единообразня. Только код для вызова потоков остается одинаковым для всех машин; язык Java перекладывает реализацию многопоточности на базовую операционную систему или библиотеку потоков. (Потоки описываются во втором томе.) Несмотря на это, имен¬но легкость организации многопоточных вычислений делает язык Java таким привле¬кательным для разработки программного обеспечения серверов.
Динамичный
Во многих отношениях язык Java является более динамичным, чем языки С или С++. Он был разработан так, чтобы легко адаптироваться к по¬стоянно изменяющейся среде. В библиотеки можно свободно добавлять но¬вые методы и объекты, не причиняя никакого вреда. Язык Java позволяет легко получать информацию о ходе выполнения программы.
Это очень важно в тех случаях, когда требуется добавить код в уже выполняемую про¬грамму. Ярким примером этого является код, который загружается из Интернет для вы¬полнения броузером. В версии Java 1.0 получить информацию о ходе выполняемой про¬граммы было совсем не легко, однако нынешняя версия языка Java раскрывает перед про¬граммистом как структуру, так и поведение объектов выполняемой программы. Это весьма ценно для систем, которые должны анализировать объекты в ходе выполнения програм¬мы. К таким системам относятся средства создания графического пользовательского ин¬терфейса, интеллектуальные отладчики, сменные компоненты и объектные базы данных.