Файл: История и развитие методологии объектно-ориентированного программирования. Сферы применения (Теоретические основы объектно-ориентированного программирования).pdf
Добавлен: 31.03.2023
Просмотров: 396
Скачиваний: 1
СОДЕРЖАНИЕ
1. Теоретические основы объектно-ориентированного программирования
1.1. История объектно-ориентированного программирования
1.2. Характеристики объектно-ориентированных языков программирования
2. Объектно-ориентированное моделирование
2.1. Объектная модель проектирования
2.2. Объектно-ориентированное программирование
2.3. Проектирование и анализ в рамках объектно-ориентированной модели
3. Практические приемы разработки приложения
ВВЕДЕНИЕ
Популярность объектного подхода обусловлена объективными факторами усложнения программных систем и неуклонным повышением требований к интеллектуальности, производительности, эргономичности, доступности и адаптивности программного обеспечения и средств разработки.
Объектно-ориентированное программирование как самостоятельное направление на текущем этапе развития информационных технологий занимает существенную долю всех доступных средств разработки, анализа, проектирования и моделирования.
Особая роль объектно-ориентированных технологий приводит к необходимости детального изучения принципов построения программных компонент информационных систем на базе объектных технологий. При этом объектно-ориентированное программирование (далее – ОП) – это только одно из нескольких самостоятельных направлений изучения и использования теории, в основе которой лежат термины «объект» и «класс». При употреблении термина «объектно-ориентированное программирование» подразумевается вся совокупность всех языков программирования, которые по совокупным признакам можно отнести к данной группе. Такие языки относят к объектно-ориентированным языкам программирования (ООЯП). При этом ОП включает также различные технологии программирования, которые используются на практике при разработке приложений на ООЯП.
Современные технологии объектно-ориентированного программирования интенсивно развиваются – на данный момент программисту недостаточно понимать простейшие принципы ОП (инкапсуляция, полиморфизм, наследование). ОП, как технология, должна реагировать на появление новых требований современного высокотехнологичного мира: параллельный характер процессов в информационных системах; распределенный характер информационных систем; повышение требований к защищенности программного обеспечения: слияние различных технологий разработки приложений и востребованность унифицированного подхода к проектированию и разработке веб-приложений, сервисов, интерфейсов.
Цель курсовой работы узнать больше информации об объектно-ориентированном программировании.
Задачи:
1. Раскрыть теоретические основы объектно-ориентированного программирования
2. Охарактеризовать объектно-ориентированные языки программирования
3. Построить графический интерфейс средствами Java
Объект исследования – объектно-ориентированные языки программирования.
Предмет исследования – создание интерфейса с помощью объектно-ориентированного языка программирования.
Высококвалифицированный программист должен понимать основные ошибки, которые приводят к созданию неэффективных приложений. Программирование приложений должно быть критическим: необходимо использовать различные системы принципов (например, S.O.L.I.D.) и активно применять проверенные паттерны проектирования.
1. Теоретические основы объектно-ориентированного программирования
1.1. История объектно-ориентированного программирования
В отличие от других методологий разработки программного обеспечения объектно-ориентированное программирование (ООП) не ограничивается одним языком программирования, не имеет четкой привязки к конкретному языку программирования. По мнению Вульфа, язык программирования выступает, с одной стороны, как инструмент проектирования, и, с другой стороны, как средство человеческого восприятия, так и как средство управления компьютером [9, c. 478].
В настоящее время насчитывается более двух тысяч языков программирования высокого уровня. Большинство этих языков возникло исходя из конкретных требований некоторой предметной области. Каждый, вновь созданный язык позволяет решать более сложный класс задач на основе применения новых методологий программирования, вводя и обрабатывая новые понятия, взаимоотношения между объектами [4, c. 335].
На развитие языков программирования значительное влияние оказали в то время достижения в теории вычисления, которые привели к формальному пониманию семантики операторов, модулей, абстрактных типов данных и процедур. На рис. 1 представлена генеалогия развития языков программирования, начиная с 1960 г [9, c. 569].
Рис. 1. Генеалогия объектных и объектно-ориентированных языков
Представленные языки программирования сгруппированы в четыре поколения по признаку поддерживаемых ими абстракций: математические, алгоритмические, ориентированные на данные, объектно-ориентированные. Самые последние достижения в области их развития связаны с объектной моделью. Вообще, объектными принято называть языки, которые поддерживают абстракции данных и классы, а объектно-ориентированными являются те объектные языки, которые поддерживают наследование и полиморфизм [16, c. 358].
Язык Simula, созданный в 1960 году Далем, Мюрхогом и Ныгардом, является общим предком объектных и объектно-ориентированных языков. Этот язык основывался на идеях ALGOL, дополнен механизмом наследования и инкапсуляции и предназначался для описания систем и моделирования.
Отметим, что к объектно-ориентированным языкам программирования относятся следующие: Smalltalk, Object Pascal, C++, CLOS и Ada. Шмукер (Schmucker) утверждал, что «Object Pascal – это «скелет» объектно-ориентированного языка. В нем нет методов класса, переменных класса, множественного наследования и метаклассов. Эти механизмы исключены специально, чтобы сделать язык простым для изучения начинающими «объектными» программистами» [18, c. 144].
Рассмотрим наиболее известные технологии, применяемые в программировании и дадим им краткие характеристики [18, c. 41]:
- метод «северо-западного» угла. Пусть имеется лист бумаги или экран дисплея. Программа на этом листе будет писаться сразу от начала до конца, без использования каких-либо общих принципов;
- технология структурного программирования, сочетающая в себе принципы модульности, нисходящего и пошагового проектирования программ, одновременного проектирования программ и структур данных;
- технология объектного программирования. Такая технология связана с использованием понятий объектов и их классов при проектировании программы.
В течение всех лет эволюции развития программирования от программистов требовалось совершенствование технологических приемов и создания на их основе таких средств программирования, которые упростили бы процесс разработки программ, позволяя создавать все более сложные программные системы [17, c. 123].
Известно, что первые программы создавались посредством переключателей на панели компьютера. Очевидно, что такой способ подходил только для небольших программ. Затем программы создавались на машинном языке. Сложность программы ограничивалась способностью программиста одновременно отслеживать последовательность выполняемых операций и местонахождение большого количества данных.
Увеличение сложности программы в дальнейшем было связано с появлением сначала ассемблеров, а затем и языков высокого уровня. Это позволило сделать программу более обозримой за счет снижения уровня детализации [32, c. 35].
Именно подпрограммы позволили существенно снизить трудоемкость разработки программ. Подпрограммы можно было сохранять и использовать в других программах. В результате были накоплены огромные библиотеки расчетных и служебных подпрограмм, которые по мере надобности вызывались из разрабатываемой программы [31, c. 202]. Типичная программа того времени состояла из основной программы, области глобальных данных и набора подпрограмм (в основном библиотечных), выполняющих обработку всех данных или их части (рис. 2).
Рис. 2. Архитектура программы, использующей глобальную область данных
В этой архитектуре слабым местом было то, что при увеличении количества подпрограмм возрастала вероятность искажения части глобальных данных какой-либо подпрограммой. Например, обычно подпрограмма поиска корней уравнения на заданном интервале по методу деления отрезка пополам меняет величину интервала [31, c. 234]. Если при выходе из подпрограммы не предусмотреть восстановления первоначального интервала, то в глобальной области окажется неверное значение интервала, полученное при последнем делении отрезка в ходе работы подпрограммы.
Необходимость исключения таких ошибок привела к идее использования в подпрограммах локальных данных (рис. 3).
Рис. 3. Архитектура программы, использующей подпрограммы с локальными данными
И вновь сложность разрабатываемого программного обеспечения стала ограничиваться возможностью программиста отслеживать процессы обработки данных уже на новом уровне [27, c. 159]. К этому добавились проблемы согласования интерфейса при ведении разработки несколькими программистами. В результате встал вопрос создания технологии разработки сложных программных продуктов, снижающих вероятность появления ошибок.
Усилиями многих авторов такая технология была создана и получила название «структурное программирование».
Структурное программирование нашло свое применение в конце 60-х – начале 70-х годов прошлого столетия в работах Э. Брукса, Н. Вирта, Э. Дейкстры, А.П. Ершова, Э. Йордана, П. Парнаса и др. [27, c. 167]. Основной идеей в данном подходе явилось упорядочение структуры программы путем использования небольшого количества структур управления с ограниченным использованием (или даже вообще без использования) оператора безусловного перехода (goto).
Свойствами структурного подхода являются [19, c. 21]:
- сначала программа формулируется в виде некоторого неформального действия на естественном языке;
- вначале определяются входные параметры и результат действия;
- очередной шаг детализации не меняет структуру программы, полученную на предыдущих шагах;
- если в процессе проектирования получаются идентичные действия в различных ветвях, то это означает необходимость оформления этого действия отдельной функцией;
- необходимые структуры данных проектируются одновременно с детализацией программы.
Были сформулированы основные принципы выполнения разработки программного обеспечения при структурном программировании [19, c. 36]:
1) принцип нисходящей разработки, согласно которому на всех этапах вначале необходимо определить наиболее общие моменты, а затем поэтапно выполнять детализацию, сосредотачивая свое внимание на небольших фрагментах разработки;
2) собственно структурное программирование, включающее структуры алгоритмов и стиль программирования;
3) принцип сквозного структурного контроля, предполагающий проведение содержательного контроля всех этапов разработки (чем раньше обнаружена ошибка, тем проще ее исправить).
В основе структурного программирования лежит декомпозиция (разбиение на части) сложных систем с целью последующей реализации в виде отдельных небольших (до 40-50 операторов) подпрограмм [18, c. 72]. В отличие от используемого ранее интуитивного подхода к декомпозиции, структурный подход требовал представления задачи в виде иерархии подзадач простейшей структуры, для получения которой рекомендовалось применять метод пошаговой детализации. С появлением других принципов декомпозиции (объектного, логического и т.д.) данный способ получил название процедурной декомпозиции.
Метод пошаговой детализации заключается в следующем [16, c. 245]:
1) определяется общая структура программы в виде одного из трех вариантов: последовательности подзадач (например, ввод, преобразование и вывод данных), альтернативы подзадач (например, добавление записей к файлу или их поиск), повторения подзадачи (например, циклически повторяемая обработка данных);
2) каждая подзадача, в свою очередь, разбивается на подзадачи с использованием тех же структур;
3) процесс продолжается, пока на очередном уровне не получается простейшая подзадача, которая достаточно просто реализуется средствами используемого языка (1-2 управляющих оператора языка).
Дальнейший рост сложности и размеров разрабатываемого программного обеспечения потребовал развития структурирования данных и, соответственно, в языках появляется возможность определения пользовательских типов данных [15, c. 66]. Одновременно усиливается стремление разграничить доступ к глобальным данным программы для уменьшения количества ошибок. Результатом было появление и развитие технологии модульного программирования (70-е годы прошлого века) [15, c.158].
В модульном программировании программа организуется в виде совокупности модулей (функций) (рис. 4).