Файл: История и развитие методологии объектно-ориентированного программирования. Сферы применения (Теоретические основы объектно-ориентированного программирования).pdf
Добавлен: 31.03.2023
Просмотров: 395
Скачиваний: 1
СОДЕРЖАНИЕ
1. Теоретические основы объектно-ориентированного программирования
1.1. История объектно-ориентированного программирования
1.2. Характеристики объектно-ориентированных языков программирования
2. Объектно-ориентированное моделирование
2.1. Объектная модель проектирования
2.2. Объектно-ориентированное программирование
2.3. Проектирование и анализ в рамках объектно-ориентированной модели
3. Практические приемы разработки приложения
3) классы не существуют в программе обособленно – они объединены в иерархические структуры.
Выполнение этих трех требований позволяет идентифицировать язык как объектно-ориентированный. Существуют языки, в которых может не соблюдаться одно из требований. Например, если в языке не реализовано наследование, то программирование называется не объектно-ориентированным, а программированием с помощью абстрактных типов данных (programming with abstract data types). К таким языкам относится объектно-осведомленный язык Visual Basic 6.0 (VB6).
Принципы, которым удовлетворяет объектно-ориентированный язык:
1) использует объекты, которые являются представлением абстракций предметной области; объекты реализуют различные операции, совокупность которых образует интерфейс объекта; закрытые переменные образуют состояние объекта;
2) каждому объекту поставлен в соответствие класс; существует множество объектов одного класса;
3) классы могут реализовывать механизмы наследования: наследование реализации и наследование интерфейсов.
К объектно-ориентированным языкам относят: Java, C++, C#, Ruby, Smalltalk.
2.3. Проектирование и анализ в рамках объектно-ориентированной модели
Программирование предполагает построение программных средств с безошибочным и эффективным использованием конкретного языка программирования. При проектировании основное внимание уделяется точному и эффективному построению сложных систем. Объектно-ориентированное проектирование представляет собой один из методов проектирования. Он сочетает в себе процесс объектной декомпозиции и систему обозначения. Система обозначения призвана представить логическую и физическую, а также статическую и динамическую модели для проектируемой системы.
Основные аспекты, вытекающие из данного определения:
1) ОП основано на представлении системы в виде совокупности объектов – объектная декомпозиция;
2) использует разные системы обозначений для представления логических (объекты и классы) и физических (модули и процессы) моделей системы, а также ее статические и динамические аспекты.
Объектно-ориентированная декомпозиция – основное отличие объектного подхода от структурного. В ОП для выражения логической структуры системы используются классы и объекты, а в случае структурного подхода – алгоритмы и алгоритмические абстракции. Под объектно-ориентированным проектированием иногда понимают различные методы в результате которых получается представление системы в виде объектов.
Методы структурного анализа основаны на исследовании потоков данных внутри программных систем. Существует также объектно-ориентированный анализ (object-oriented analysis). Объектно-ориентированный анализ (ООА) позволяет создавать модели действительности с применением объектно-ориентированного подхода.
Объектно-ориентированный анализ – это метод анализа, исследующий требования к системе с точки зрения классов и объектов, относящихся к словарю предметной области.
Результатами объектно-ориентированного анализа являются модели, лежащие в основе объектно-ориентированного проектирования, которое в свою очередь позволяет разработать схему полной реализации системы с использованием объектно-ориентированного программирования.
3. Практические приемы разработки приложения
Разработка приложений с графическим интерфейсом, как одно из направлений программирования, отражает практически все достижения и наработки современной объектно-ориентированной технологии.
ОП – это инструментарий для разработки сложных программ. Следует понимать, что графические приложения традиционно являются более сложными. Объектно-ориентированное программирование и проектирование в полной мере проявляют свои преимущества при создании приложений с графическим интерфейсом пользователя.
Технологии построения подобных приложений непрерывно изменяются, совершенствуются. Наблюдается тенденция к возникновению единого технологического и методологического подхода при разработке приложений как для настольных решений, так и для сетевых веб-приложений. Технология WPF в полной мере отражает данную тенденцию: язык XAML обеспечивает независимую от бизнес-логики разработку интерфейса. При этом сама структура языка XAML приближена к HTML.
В библиотеке Swing, представленной в технологии Java, унификация технологий настольных и сетевых приложений явно не прослеживается. Но следует понимать, что Java как технология изначально ориентирована на использование в сетевой среде: технология Swing применяется как для создания приложений по принципу «толстый клиент», так и для разработки веб-интерфейсов на базе сервлетов (использование Servlet, Java Server Pages, Java Server Faces).
Унификация технологий построения графического интерфейса на современном этапе развития программных систем приводит к повышению роли HTML, но значимости объектно-ориентированного подхода данный факт не уменьшает: программирование бизнес-логики приложений остается уделом ОП.
3.1. Построение графического интерфейса средствами Java
Существуют различные технологии разработки приложений с графическим интерфейсом пользователя, включая мультиплат-форменные. В рамках данного пособия рассматривается инструментарий, доступный программисту Windows-приложений, но затрагиваются вопросы разработки с использованием библиотеки Swing, которая предполагает однотипное использование элементов при создании приложений для разных операционных систем.
Основные концепции, библиотеки. Объектно-ориентированное программирование как технология претерпевала развитие параллельно с развитием технологий взаимодействия компьютеров с пользователями. Появление графического интерфейса пользователя (ГИП) существенно усложнило разработку прикладного ПО и вывело на первый план именно ОП-парадигму, которая наиболее полно учитывает потребности разработчиков графических приложений.
В большинстве высокоуровневых языков разработки приложений с ГИП реализованы библиотеки для построения интерфейса пользователя. В языке C# используются технологии Windows Forms и Windows Presentation Foundation. В Java существуют библиотеки AWT и Swing.
Стандартная поставка Java SE включает в себя библиотеку классов, обеспечивающих создание графического интерфейса пользователя (ГИП) (Graphical User Interface, GUI). Эта графическая библиотека получила название JFC (Java Foundation Classes). В библиотеке JFC можно выделить шесть основных частей:
1) AWT (Abstract Window Toolkit) – базовая библиотека классов с несколько устарелым набором «тяжелых» (heavyweight) графических компонентов, расположенная в пакете java.awt и его подпакетах.
2) Swing – библиотека «легких» (lightweight) графических компонентов, дополняющая и во многом заменяющая библиотеку AWT. Занимает почти двадцать пакетов с префиксом javax.swing;
3) Java 2D – часть библиотеки AWT, обеспечивающая рисование графики, выбор цвета, вывод изображений и фигурного текста, а также преобразование их перед выводом.
4) DnD (Drag and Drop) – библиотека классов, позволяющих перемещать объекты из одного компонента в другой с помощью буфера обмена (clipboard). Классы этой библиотеки помещены в пакеты java.awt.datatransfer и java.awt.dnd;
5) Input Method Framework – классы для создания новых методов ввода/вывода. Они занимают пакеты java.awt.im и java.awt.im.spi;
6) Accessibility – библиотека классов для взаимодействия с нестандартными устройствами ввода/вывода: клавиатурой Брайля, световым пером и др. Она расположена в пакете javax.accessibility.
Интерфейс программирования графики (Java Graphics API) представлен двумя технологиями в Java: AWT и Swing.
Возможности технологии AWT разнообразны – AWT состоит из 12 пакетов. В большинстве приложений используются пакеты java.awt и java.awt.event. Это наиболее часто используемые пакеты.
Пакета java.awt содержит:
1) классы, представляющие компоненты ГИП (GUI Component Classes). Эти классы представляют такие элементы как кнопки (Button), текстовые поля (TextField), надписи (Label) и пр.;
2) классы, представляющие контейнеры ГИП (GUI Container Classes). Представляют такие элементы как панель (Panel), фрейм (Frame), диалог (Dialog) и пр.;
3) менеджеры расположения элементов (Layout managers). Это элементы FlowLayout, BorderLayout и GridLayout;
4) вспомогательные классы и графические классы общего назначения (Custom graphics classes). Например, классы для представления цвета (Color), шрифтов (Font).
Пакет java.awt.event, как видно из названия, содержит классы для работы с системой событий и содержит:
1) классы событий (Event classes): ActionEvent, MouseEvent, KeyEvent и WindowEvent;
2) интерфейсы слушателей событий (Event Listener Interfaces): ActionListener, MouseListener, KeyListener и WindowListener;
3) классы адаптеров слушателей событий (Event Listener Adapter classes): MouseAdapter, KeyAdapter и WindowAdapter.
AWT обеспечивает интерфейс для разработки графических приложений, независимый от платформы и устройства. Эти приложения запускаются на всех ОС.
В AWT выделяют два типа GUI элементов: компоненты (Component) и контейнеры (Container). На рис. 5 представлена диаграмма классов AWT, на которой разделены эти две группы элементов.
Рис. 5. Диаграмма классов AWT
Понимание принципов функционирования библиотеки AWT необходимо для программирования на Java с использованием любой другой библиотеки ГИП, включая Swing. Но детальное описание AWT выходит за рамки данного учебного пособия. В данной главе акцент сделан на разработке с использованием Swing.
Технология разработки ГИП Swing основана на AWT. На рис. 6 представлена диаграмма классов, отражающая преемственность двух технологий.
Рис. 6. Связь AWT и Swing
Особенности библиотеки Swing:
1) Swing написан на «чистом» Java (pure Java);
2) компоненты Swing являются «легковесными», тогда как компоненты AWT – «тяжеловесные». Это означает, что компоненты Swing вообще не нуждаются в поддержке операционной системы и поэтому гораздо более стабильны, и быстры;
3) компоненты Swing поддерживают подключаемые вид и поведение (pluggable look-and-feel). Такое поведение компонентов реализовано на основе архитектурного подхода MVC;
4) в компоненты Swing встроена поддержка всплывающих подсказок, рамок, клавиатурных действий, средств для пользователей с ограниченными возможностями;
5) компоненты Swing – это компоненты JavaBeans (модель визуального программирования, основанная на компонентах);
6) приложения Swing используют классы AWT для обработки событий (пакет java.awt.event). Swing добавляет новые классы в пакет javax.swing.event, но они используются редко;
7) приложения Swing используют классы AWT для управления размещением компонентов (FlowLayout и BorderLayout пакета java.awt). При этом добавлены новые менеджеры размещения, такие как Springs, Struts, и BoxLayout (пакет javax.swing);
8) в Swing реализована двойная буферизация и оптимизирован механизм прорисовки компонентов.
9) в Swing реализована поддержка много документального интерфейса (JLayeredPane и JInternalFrame);
10) в Swing существенно расширен список поддерживаемых компонентов.
На рис. 7 изображена иерархия классов Swing, где представлены наиболее часто используемые компоненты.
Описание и принципы работы с каждым из представленных компонентов представлены в документации Java. Перед рассмотрением отдельных компонентов пользовательского интерфейса, необходимо освоить работу с главным элементом графического пользовательского интерфейса – окном.
Рис. 7. Диаграмма классов Swing
Контейнеры высшего уровня. Контейнеры высшего уровня (top level containers) представляют собой окна операционной системы, в которых программист может размещать элементы пользо-вательского интерфейса. К контейнерам высшего уровня относятся окна JFrame и JWindow, диалоговое окно JDialog, а также апплет JApplet (не является окном, но предназначен для построения интерфейса в браузере).
Для добавления элементов в окно (например, добавление кнопки на JFrame) логично было бы использовать метод add(), но контейнеры высшего уровня не позволяют добавлять компоненты напрямую. Для выполнения подобных задач применяется специальная панель JRootPane, которая расположена внутри контейнера высшего уровня. Эта панель называется корневой панелью (root panel). Следует понимать, что корневая панель не является отдельным компонентом – она представляет собой набор слоев (панелей), каждый из которых отвечает за определенный функционал. JRoot-Pane содержит следующие слои (рис. 8):
Рис. 8. Структура JFrame
1. Многослойная панель JLayeredPane. Представляет собой совокупность слоев, в которых располагаются визуальные компоненты Swing. Каждый слой имеет свой идентификатор, и программист может создавать произвольное количество слоев и располагать в них свои элементы. Существуют стандартные (предопределенные слои), номера которых заданы идентификаторами.