Платформа Java. Основные версии и продукты Java

Содержание

Слайд 2

Платформа Java. Основные версии и продукты Java

Платформа Java. Основные версии и продукты Java

Слайд 3

Платформа Java Java -платформа обладает следующими преимуществами: переносимость, или кроссплатформенность; объектная

Платформа Java

Java -платформа обладает следующими преимуществами:
переносимость, или кроссплатформенность;
объектная

ориентированность, создана эффективная объектная модель;
привычный синтаксис С/С++;
встроенная и прозрачная модель безопасности;
ориентация на Internet-задачи, сетевые распределенные приложения;
динамичность, легкость развития и добавления новых возможностей;
простота освоения.
Слайд 4

Основные версии и продукты Java Впервые Java была объявлена 23 мая

Основные версии и продукты Java

Впервые Java была объявлена 23 мая

1995 года. Основными продуктами, доступными на тот момент в виде бета-версий, были:
Java language specification, JLS, спецификация языка Java (описывающая лексику, типы данных, основные конструкции и т.д.);
спецификация JVM (предназначена в первую очередь для создателей виртуальных машин, а потому практически не используется Java -программистами);
Java Development Kit, JDK - средство разработчика, состоящее в основном из утилит, стандартных библиотек классов и демонстрационных примеров. JDK не содержит никаких текстовых редакторов, а оперирует только уже существующими Java -файлами. Компилятор представлен утилитой javac ( java compiler). Виртуальная машина реализована программой java.
Слайд 5

Стандартные библиотеки Java Первая версия содержала всего 8 стандартных библиотек: java.lang

Стандартные библиотеки Java

Первая версия содержала всего 8 стандартных библиотек:
java.lang - базовые

классы, необходимые для работы любого приложения (название - сокращение от language);
java.util - многие полезные вспомогательные классы;
java.applet - классы для создания апплетов ;
java.awt, java.awt.peer - библиотека для создания графического интерфейса пользователя ( GUI ), называется Abstract Window Toolkit, AWT;
java.awt.image - дополнительные классы для работы с изображениями;
java.io - работа с потоками данных (streams) и с файлами;
java.net - работа с сетью.
Слайд 6

Система именования версий Обозначение версии состоит из трех цифр. Первой пока

Система именования версий

Обозначение версии состоит из трех цифр.
Первой пока всегда

стоит 1. Это означает, что поддерживается полная совместимость между всеми версиями 1.х.х. То есть программа, написанная на более старом JDK, всегда успешно выполнится на более новом. По возможности соблюдается и обратная совместимость - если программа откомпилирована более новым JDK, а никакие новые библиотеки не использовались, то в большинстве случаев старые виртуальные машины смогут выполнить такой код.
Вторая цифра изменялась от 0 до 7 (последняя на момент создания курса). В каждой версии происходило существенное расширение стандартных библиотек (212, 504, 1781, 2130 и 2738 - количество классов и интерфейсов с 1.0 по 1.4), а также добавлялись некоторые новые возможности в сам язык. Менялись и утилиты, входящие в JDK.
Наконец, третья цифра означает развитие одной версии. В языке или библиотеках ничего не меняется, лишь устраняются ошибки, производится оптимизация, могут меняться (добавляться) аргументы утилит. Так, последняя версия JDK 1.0 - 1.0.2.
Хотя с развитием версии 1.х ничего не удаляется, конечно, какие-то функции или классы устаревают. Они объявляются deprecated, и хотя они будут поддерживаться до объявления 2.0 (а про нее пока ничего не было слышно), пользоваться ими не рекомендуется.
Слайд 7

Java 1.1 Основные недостатки, обнаруженные в версии 1.0, были: низкая производительность,

Java 1.1

Основные недостатки, обнаруженные в версии 1.0, были: низкая производительность, бедные

возможности AWT, отсутствие работы с базами данных и другие.
С октября 1996 года Sun развивает новый продукт - Just-In-Time компилятор, JIT. В том же году были добавлены многие новые важные возможности: JavaBeans, JDBC (Java DataBase Connectivity), RMI (Remote Method Invocation), усовершенствованы поддержка национальных языков и система безопасности.
За первые три недели JDK 1.1 был скачан более 220 тыс. раз, через год - более 2 млн. раз. Сейчас версия 1.1 считается устаревшей и ее развитие остановилось на 1.1.8.
В апреле 1997 года объявляется, что компании Sun и Netscape планируют объединить технологии AWT и IFC для создания нового продукта Java Foundation Classes, JFC, в который должны войти: усовершенствованный оконный интерфейс Swing; реализация Drag-and-Drop; поддержка 2D-графики, более удобная работа с изображениями; Accessibility API для пользователей с ограниченными возможностями и другие функции.
Слайд 8

Java 2 Выход следующей версии Java 1.2 много раз откладывался, но

Java 2

Выход следующей версии Java 1.2 много раз откладывался, но в

итоге она настолько превзошла предыдущую 1.1, что ее и все последующие версии начали называть платформой Java 2. Первая бета-версия стала доступной в декабре 1997 года, а финальная версия была выпущена 8 декабря 1998 года, и за первые восемь месяцев ее скачали более миллиона раз.
Список появившихся возможностей очень широк, поэтому перечислим наиболее значимые из них: существенно переработанная модель безопасности, введены понятия политики (policy) и разрешения (permission); JFC стал стандартной частью JDK, причем библиотеки стали называться, например, javax.swing для Swing; полностью переработанная библиотека коллекций (collection framework) - классов для хранения набора объектов; Java Plug-in был включен в JDK; улучшения в производительности, глобализации, защита от "проблемы-2000". С февраля 1999 года исходный код самой JVM был открыт для бесплатного доступа всем желающим.
Самое же существенное изменение произошло 15 июня 1999 года, спустя полгода после выхода JDK 1.2. На конференции разработчиков JavaOne компания Sun объявила о разделении развития платформы Java 2 на три направления:
Java 2 Platform, Standard Edition ( J2SE );
Java 2 Platform, Enterprise Edition ( J2EE );
Java 2 Platform, Micro Edition ( J2ME ).
Слайд 9

Java 7

Java 7

Слайд 10

Методология процедурно-ориентированного программирования

Методология процедурно-ориентированного программирования

Слайд 11

Методология процедурно-ориентированного программирования Исходным в данной методологии является понятие алгоритма. Алгоритм

Методология процедурно-ориентированного программирования

Исходным в данной методологии является понятие алгоритма. Алгоритм

- это способ решения вычислительных и других задач, точно описывающий определенную последовательность действий, которые необходимо выполнить для достижения заданной цели.
При увеличении объемов программ для упрощения их разработки появилась необходимость разбивать большие задачи на подзадачи. В языках программирования возникло и закрепилось новое понятие процедуры. Как и алгоритм, процедура представляет собой законченную последовательность действий или операций, направленных на решение отдельной задачи. Например, на языке Pascal описание процедуры выглядит следующим образом:
Procedure printGreeting(name: String)
Begin
Write("Hello, ");
WriteLn(name);
End;
Слайд 12

Методология структурного программирования Появление и интенсивное использование условных операторов и оператора

Методология структурного программирования

Появление и интенсивное использование условных операторов и оператора безусловного

перехода стало предметом острых дискуссий среди специалистов по программированию. Бесконтрольное применение в программе оператора безусловного перехода goto может заметно осложнить понимание кода. Такие запутанные программы сравнивали с порцией спагетти (bowl of spaghetti), имея в виду многочисленные переходы от одного фрагмента программы к другому, или, что еще хуже, возврат от конечных операторов программы к начальным. Ситуация казалась настолько драматичной, что многие предлагали исключить оператор goto из языков программирования. Именно с этого времени отсутствие безусловных переходов стали считать хорошим стилем программирования.
Дальнейшее увеличение программных систем способствовало формированию новой точки зрения на процесс разработки программ и написания программных кодов, которая получила название методологии структурного программирования. Ее основой является процедурная декомпозиция предметной области решаемой задачи и организация отдельных модулей в виде совокупности процедур. В рамках этой методологии получило развитие нисходящее проектирование программ, или проектирование "сверху вниз". Пик популярности идей структурного программирования приходится на конец 70-х - начало 80-х годов.
Слайд 13

Методология и принципы объектно-ориентированного программирования

Методология и принципы объектно-ориентированного программирования

Слайд 14

Методология объектно-ориентированного программирования Увеличение размеров программ приводило к необходимости привлечения большего

Методология объектно-ориентированного программирования

Увеличение размеров программ приводило к необходимости привлечения большего

числа программистов, что, в свою очередь, потребовало дополнительных ресурсов для организации их согласованной работы. В процессе разработки приложений заказчик зачастую изменял функциональные требования, что еще более усложняло процесс создания программного обеспечения.
Как показала практика, традиционные методы процедурного программирования не способны справиться ни с нарастающей сложностью программ и их разработки, ни с необходимостью повышения их надежности. Во второй половине 80-х годов возникла настоятельная потребность в новой методологии программирования, которая была бы способна решить весь этот комплекс проблем. Ею стало объектно-ориентированное программирование (ООП).
Объектно-ориентированный подход к проектированию основан на представлении предметной области задачи в виде множества моделей для независимой от языка разработки программной системы на основе ее прагматики.
Прагматика определяется целью разработки программной системы, например, обслуживание клиентов банка, управление работой аэропорта, обслуживание чемпионата мира по футболу и т.п. В формулировке цели участвуют предметы и понятия реального мира, имеющие отношение к создаваемой системе.
Слайд 15

Моделирование задачи в ООП

Моделирование задачи в ООП

Слайд 16

Достоинства ООП ООП обладает следующими преимуществами: уменьшение сложности программного обеспечения; повышение

Достоинства ООП

ООП обладает следующими преимуществами:
уменьшение сложности программного обеспечения;
повышение надежности программного обеспечения;
обеспечение

возможности модификации отдельных компонентов программного обеспечения без изменения остальных его компонентов;
обеспечение возможности повторного использования отдельных компонентов программного обеспечения.
Систематическое применение объектно-ориентированного подхода позволяет разрабатывать хорошо структурированные, надежные в эксплуатации, достаточно просто модифицируемые программные системы. Этим объясняется интерес программистов к объектно-ориентированному подходу и объектно-ориентированным языкам программирования. ООП является одним из наиболее интенсивно развивающихся направлений теоретического и прикладного программирования.
Слайд 17

Понятие объекта, класса. Типы отношений между классами

Понятие объекта, класса. Типы отношений между классами

Слайд 18

Понятие объекта Будем называть объектом понятие, абстракцию или любой предмет с

Понятие объекта

Будем называть объектом понятие, абстракцию или любой предмет с четко

очерченными границами, имеющий смысл в контексте рассматриваемой прикладной проблемы. Введение объектов преследует две цели:
понимание прикладной задачи (проблемы);
введение основы для реализации на компьютере.
Каждый объект имеет определенное время жизни. В процессе выполнения программы, или функционирования какой-либо реальной системы, могут создаваться новые объекты и уничтожаться уже существующие.
Гради Буч дает следующее определение объекта:
Объект - это мыслимая или реальная сущность, обладающая характерным поведением и отличительными характеристиками и являющаяся важной в предметной области.
Каждый объект имеет состояние, обладает четко определенным поведением и уникальной идентичностью.
Слайд 19

Состояние Состояние (state) - совокупный результат поведения объекта: одно из стабильных

Состояние


Состояние (state) - совокупный результат поведения объекта: одно из стабильных условий,

в которых объект может существовать, охарактеризованных количественно; в любой момент времени состояние объекта включает в себя перечень (обычно статический) свойств объекта и текущие значения (обычно динамические) этих свойств.
Рассмотрим пример. Любой человек может находиться в некотором положении (состоянии): стоять, сидеть, лежать, и - в то же время совершать какие-либо действия.
Например, человек может прыгать, если он стоит, и не может - если он лежит, для этого ему потребуется сначала встать. Также в объектно-ориентированном программировании состояние объекта может определяться наличием или отсутствием связей между моделируемым объектом и другими объектами.
Слайд 20

Поведение Поведение (behavior) - действия и реакции объекта, выраженные в терминах

Поведение

Поведение (behavior) - действия и реакции объекта, выраженные в терминах передачи

сообщений и изменения состояния ; видимая извне и воспроизводимая активность объекта.
Результат выполнения действий зависит от состояния объекта на момент совершения действия.
В терминологии объектно-ориентированного подхода понятия "действие", "сообщение" и "метод" являются синонимами. Т.е. выражения "выполнить действие над объектом ", "вызвать метод объекта " и "послать сообщение объекту для выполнения какого-либо действия" эквивалентны. Последняя фраза появилась из следующей модели. Программу, построенную по технологии ООП, можно представить себе как виртуальное пространство, заполненное объектами, которые условно "живут" некоторой жизнью. Их активность проявляется в том, что они вызывают друг у друга методы, или посылают друг другу сообщения. Внешний интерфейс объекта, или набор его методов,- это описание того, какие сообщения он может принимать.
Слайд 21

Уникальность Уникальность - это то, что отличает объект от других объектов.

Уникальность
Уникальность - это то, что отличает объект от других объектов. Например,

у вас может быть несколько одинаковых монет. Даже если абсолютно все их свойства (атрибуты) одинаковы (год выпуска, номинал и т.д.) и при этом вы можете использовать их независимо друг от друга, они по-прежнему остаются разными монетами.
В машинном представлении под параметром уникальности объекта чаще всего понимается адрес размещения объекта в памяти.
Identity ( уникальность ) объекта состоит в том, что всегда можно определить, указывают две ссылки на один и тот же объект или на разные объекты. При этом два объекта могут во всем быть похожими, их образ в памяти может представляться одинаковыми последовательностями байтов, но, тем не менее, их Identity может быть различна.
Наиболее распространенной ошибкой является понимание уникальности как имени ссылки на объект. Это неверно, т.к. на один объект может указывать несколько ссылок, и ссылки могут менять свои значения (ссылаться на другие объекты).
Итак, уникальность (identity) - свойство объекта; то, что отличает его от других объектов (автор не согласен с переводом русского издания, поэтому здесь приводится авторский перевод).
Слайд 22

Классы Все монеты из предыдущего примера принадлежат одному и тому же

Классы

Все монеты из предыдущего примера принадлежат одному и тому же классу

объектов (именно с этим связана их одинаковость). Номинальная стоимость монеты, металл, из которого она изготовлена, форма - это атрибуты класса. Совокупность атрибутов и их значений характеризует объект. Наряду с термином "атрибут" часто используют термины "свойство" и "поле", которые в объектно-ориентированном программировании являются синонимами.
Все объекты одного и того же класса описываются одинаковыми наборами атрибутов. Однако объединение объектов в классы определяется не наборами атрибутов, а семантикой. Так, например, объекты "конюшня" и "лошадь" могут иметь одинаковые атрибуты: цена и возраст. При этом они могут относиться к одному классу, если рассматриваются в задаче просто как товар, либо к разным классам, если в рамках поставленной задачи будут использоваться по-разному, т.е. над ними будут совершаться разные действия.
Объединение объектов в классы позволяет рассмотреть задачу в более общей постановке. Класс имеет имя (например, "лошадь"), которое относится ко всем объектам этого класса. Кроме того, в классе вводятся имена атрибутов, которые определены для объектов. В этом смысле описание класса аналогично описанию типа структуры или записи (record), широко применяющихся в процедурном программировании; при этом каждый объект имеет тот же смысл, что и экземпляр структуры (переменная или константа соответствующего типа).
Класс - это шаблон поведения объектов определенного типа с заданными параметрами, определяющими состояние. Все экземпляры одного класса (объекты, порожденные от одного класса) имеют один и тот же набор свойств и общее поведение, то есть одинаково реагируют на одинаковые сообщения.
Слайд 23

Инкапсуляция Инкапсуляция (encapsulation) - это сокрытие реализации класса и отделение его

Инкапсуляция

Инкапсуляция (encapsulation) - это сокрытие реализации класса и отделение его внутреннего

представления от внешнего (интерфейса). При использовании объектно-ориентированного подхода не принято применять прямой доступ к свойствам какого-либо класса из методов других классов. Для доступа к свойствам класса принято задействовать специальные методы этого класса для получения и изменения его свойств.
Внутри объекта данные и методы могут обладать различной степенью открытости (или доступности). Они позволяют более тонко управлять свойством инкапсуляции.
Открытые члены класса составляют внешний интерфейс объекта. Это та функциональность, которая доступна другим классам. Закрытыми обычно объявляются все свойства класса, а также вспомогательные методы, которые являются деталями реализации и от которых не должны зависеть другие части системы.
Слайд 24

Наследование Наследование (inheritance) - это отношение между классами, при котором класс

Наследование

Наследование (inheritance) - это отношение между классами, при котором класс использует

структуру или поведение другого класса (одиночное наследование ), или других (множественное наследование ) классов. Наследование вводит иерархию "общее/частное", в которой подкласс наследует от одного или нескольких более общих суперклассов. Подклассы обычно дополняют или переопределяют унаследованную структуру и поведение.
Использование наследования способствует уменьшению количества кода, созданного для описания схожих сущностей, а также способствует написанию более эффективного и гибкого кода.
Некоторый класс также может наследовать свойства и поведение сразу нескольких классов. Наиболее популярным примером применения множественного наследования является проектирование системы учета товаров в зоомагазине.
Все животные в зоомагазине являются наследниками класса "Животное", а также наследниками класса "Товар". Т.е. все они имеют возраст, нуждаются в пище и воде и в то же время имеют цену и могут быть проданы.
Слайд 25

Полиморфизм Слово "полиморфизм " означает "имеющий много форм". Полиморфизм (polymorphism) -

Полиморфизм

Слово "полиморфизм " означает "имеющий много форм". Полиморфизм (polymorphism) -

положение теории типов, согласно которому имена (например, переменных) могут обозначать объекты разных (но имеющих общего родителя) классов. Следовательно, любой объект, обозначаемый полиморфным именем, может по-своему реагировать на некий общий набор операций.

Point[] p = new Point[1000];
Line[] l = new Line[1000];
Circle[] c = new Circle[1000];
Box[] b = new Box[1000];
...
// предположим, в этом месте происходит
// заполнение всех массивов соответствующими
// объектами
...
for(int i = 0; i < p.length;i++) {
//цикл с перебором всех ячеек массива.
//вызов метода draw() в случае,
// если ячейка не пустая.
if(p[i]!=null) p[i].draw();
}
for(int i = 0; i < l.length;i++) {
if(l[i]!=null) l[i].draw();
}
for(int i = 0; i < c.length;i++) {
if(c[i]!=null) c[i].draw();
}
for(int i = 0; i < b.length;i++) {
if(b[i]!=null) b[i].draw();
}

Point p[] = new Point[1000];
p[0] = new Circle();
p[1] = new Point();
p[2] = new Box();
p[3] = new Line();
...
for(int i = 0; i < p.length;i++) {
if(p[i]!=null) p[i].draw();
}
...

Без использования полиморфизма

С использованием полиморфизма

Слайд 26

Процедурный полиморфизм В процедурном программировании тоже существует понятие полиморфизма, которое отличается

Процедурный полиморфизм

В процедурном программировании тоже существует понятие полиморфизма, которое отличается от

рассмотренного механизма в ООП. Процедурный полиморфизм предполагает возможность создания нескольких процедур или функций с одним и тем же именем, но разным количеством или различными типами передаваемых параметров. Такие одноименные функции называются перегруженными, а само явление - перегрузкой (overloading). Перегрузка функций существует и в ООП и называется перегрузкой методов.
Примером использования перегрузки методов в языке Java может служить класс PrintWriter, который применяется, в частности, для вывода сообщений на консоль. Этот класс имеет множество методов println, которые различаются типами и/или количеством входных параметров. Вот лишь несколько из них:
void println()
// переход на новую строку
void println(boolean x)
// выводит значение булевской
// переменной (true или false)
void println(String x)
// выводит строку - значение
// текстового параметра.
Слайд 27

Типы отношений между классами Возможны следующие связи между классами в рамках

Типы отношений между классами

Возможны следующие связи между классами в рамках объектной

модели (приводятся лишь наиболее простые и часто используемые виды связей, подробное их рассмотрение выходит за рамки этой ознакомительной лекции):
агрегация (Aggregation) - отношение между классами типа "содержит" (contain) или "состоит из" называется агрегацией, или включением. ;
ассоциация (Association) - объекты одного класса ссылаются на один или более объектов другого класса, но ни в ту, ни в другую сторону отношение между объектами не носит характера "владения", или контейнеризации;
наследование (Inheritance) - отношение между классами, при котором класс использует структуру или поведение другого класса (одиночное наследование ), или других (множественное наследование ) классов;
метаклассы (Metaclass) - шаблон, описывающий свойства и поведение различных классов.
Слайд 28

Достоинства и недостатки объектно-ориентированного программирования

Достоинства и недостатки объектно-ориентированного программирования

Слайд 29

Достоинства ООП Классы позволяют проводить конструирование из полезных компонентов, обладающих простыми

Достоинства ООП

Классы позволяют проводить конструирование из полезных компонентов, обладающих простыми

инструментами, что позволяет абстрагироваться от деталей реализации.
Данные и операции над ними образуют определенную сущность, и они не разносятся по всей программе, как нередко бывает в случае процедурного программирования, а описываются вместе. Локализация кода и данных улучшает наглядность и удобство сопровождения программного обеспечения.
Инкапсуляция позволяет привнести свойство модульности, что облегчает распараллеливание выполнения задачи между несколькими исполнителями и обновление версий отдельных компонентов.
ООП дает возможность создавать расширяемые системы. Это одно из основных достоинств ООП. Расширяемость означает, что существующую систему можно заставить работать с новыми компонентами, причем без внесения в нее каких-либо изменений. Компоненты могут быть добавлены на этапе исполнения программы.
Слайд 30

Достоинства ООП Полиморфизм оказывается полезным преимущественно в следующих ситуациях. Обработка разнородных

Достоинства ООП

Полиморфизм оказывается полезным преимущественно в следующих ситуациях.
Обработка разнородных структур данных.

Программы могут работать, не различая вида объектов, что существенно упрощает код. Новые виды могут быть добавлены в любой момент.
Изменение поведения во время исполнения. На этапе исполнения один объект может быть заменен другим, что позволяет легко, без изменения кода, адаптировать алгоритм в зависимости от того, какой используется объект.
Реализация работы с наследниками. Алгоритмы можно обобщить настолько, что они уже смогут работать более чем с одним видом объектов.
Создание "каркаса" (framework). Независимые от приложения части предметной области могут быть реализованы в виде набора универсальных классов, или каркаса (framework), и в дальнейшем расширены за счет добавления частей, специфичных для конкретного приложения.
Слайд 31

Достоинства ООП Сокращается время на разработку, которое может быть отдано другим

Достоинства ООП

Сокращается время на разработку, которое может быть отдано другим задачам.
Компоненты

многоразового использования обычно содержат гораздо меньше ошибок, чем вновь разработанные, ведь они уже не раз подвергались проверке.
Когда некий компонент используется сразу несколькими клиентами, улучшения, вносимые в его код, одновременно оказывают положительное влияние и на множество работающих с ним программ.
Если программа опирается на стандартные компоненты, ее структура и пользовательский интерфейс становятся более унифицированными, что облегчает ее понимание и упрощает использование.