Файл: Применение объектно-ориентированного подхода при проектировании информационной системы (История развития объектно-ориентированного подхода).pdf

ВУЗ: Не указан

Категория: Курсовая работа

Дисциплина: Не указана

Добавлен: 13.03.2024

Просмотров: 14

Скачиваний: 0

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

"Без наследования каждый класс пред­ставляет собой изолированную структурную единицу и должен разрабатываться "с нуля". Разные классы теряют общность, поскольку каждый программист ре­ализует их методы по-своему. В этом случае согласованность классов системы может быть обеспечена только за счет дисциплинированности программистов.

Наследование позволяет создавать новые программы точно так же, как вводятся новые понятия — сравнивая новое с уже известным" [17].

Между принципами абстракции, инкапсуляции и иерархии существует здоро­вая конкуренция. "Абстракция данных создает непроницаемый барьер, скрываю­щий методы и состояние объекта. Принцип наследования требует открыть доступ и к состоянию, и к методам объекта, не прибегая к абстракции" [18]. У любого класса обычно существуют два вида клиентов: объекты, выполняющие операции над экземплярами данного класса, и подклассы, наследующие свойства класса. Лисков (Liskov) отмечает, что существуют три способа нарушения инкапсуляции с помощью наследования: "подкласс может получить доступ к переменным эк­земпляра своего суперкласса, вызвать закрытую функцию и, наконец, обратиться напрямую к суперклассу своего суперкласса" [19]. Разные языки программирова­ния по-разному согласовывают наследование с инкапсуляцией. Наиболее гибкими в этом отношении являются C++ и Java. В частности, интерфейс класса может состоять из трех частей: закрытой (private), доступной только самому классу; за­щищенной (protected), в которой объявляются члены, доступные только для класса и его подклассов; и открытую (public), доступную всем клиентам.

ГЛАВА 2. МЕТОДОЛОГИЯ ООП

2.1 Объектно-ориентированный анализ (ООА)

Объектно-ориентированный анализ – анализ сущностей реального мира со стороны понятий объекта и класса. Он направлен на понимание и объяснение того, как эти сущности взаимодействуют между собой, для составления их моделей.

Модели OOA в дальнейшем преобразуются в объектно-ориентированный проект.

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


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

Инкапсуляция позволяет во многом изолировать класс от остальных частей программы, сделать его «самодостаточным» для решения конкретной задачи. В результате класс всегда несет в себе некоторую функциональность. Например, класс TForm в Delphi содержит (инкапсулирует в себе) все необходимое для создания Windows-окна, класс TTimer обеспечивает работу таймера и т.д.

Единицей инкапсуляции в OOD является объект.

  1. Наследование позволяет создавать иерархию классов, начиная с некоторого первоначального базового класса (предка) и продолжая более сложными, включающими (наследующими) элементы предшествующих классов (потомков или производных классов).

Любой класс может быть порожден от другого класса. Для этого при его объявлении указывается имя класса-родителя:

TChildClass = class(TParentClass) (язык Object Pascal)

Порожденный класс автоматически наследует поля, методы и свойства своего родителя и может дополнять их новыми. Таким образом, принцип наследования обеспечивает поэтапное создание сложных классов и разработку собственных библиотек классов.

Полиморфизм – это свойство родственных классов решать схожие по смыслу проблемы разными способами. Для различных родственных классов можно задать единый образ действия (например, вывод на экран любой геометрической фигуры). Затем для каждого конкретного класса составляется своя подпрограмма, выполняющая это действие непосредственно для него (отображение точки отличается от отображения линии и т.д.), причем все эти подпрограммы должны иметь одно имя. Когда потребуется отобразить конкретную фигуру, будет выбрана из всего множества одноименных подпрограмм та, которая соответствует типу конкретного объекта. Если выводимый объект является точкой, то выбирается его подпрограмма, если линия – то ее.

Таким образом, полиморфизм проводит идею «один интерфейс – множество методов». Выбор конкретного действия зависит от ситуации.

2.3 Объектно-ориентированное программирование (ООР)

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


Фундаментальная концепция OOP заключается в том, что взаимодействие классов и объектов между собой происходит посредством передачи и приема сообщений. Для реализации обмена, необходимо, чтобы объекты определялись вместе с сообщениями, на которые они реагируют. Этим ООР отличается от императивного стиля программирования, в котором сначала определяются данные, а затем эти даны передаются в функции, или процедуры, как параметры. При этом средством программирования выступает один из объектно-ориентированных языков программирования. Язык программирования называется объектно-ориентированным, если есть поддержка объектов как абстракций данных, имеющих интерфейсную часть в виде поименованных операций, и защищенную область локальных данных; все объекты относятся к соответствующим типам (классам); классы могут наследоваться от суперклассов.

Любые данные хранятся как объекты, размещаемые с автоматическим выделением и освобождением памяти. Объект существует с системе до тех пор, пока его можно именовать. 

Последний принцип отличает чистые объектно-ориентированные языки такие как Smalltalk, Actor, от гибридных языков программирования, выросших из ранее существовавших процедурных языков (Object Pascal, C++). Данные подходы – две крайности в множестве объектно-ориентированных языков. Примерно в середине находится новый, полностью построенный на принципах объектно-ориентированной идеологии, однако нарушающий последний принцип, язык Java.

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

2.4 Объектно-ориентированные языки

Использование объектно-ориентированной технологии не ограничивается каким-то конкретным языком программирования. Она реализуется во многих объектных и объектно-ориентированных языках. Однако программирование является не менее важным аспектом, чем анализ и проектирование. Нельзя пренебрегать деталями кодирования поскольку в конце концов архитектурные особенности систем должны быть выражены с помощью какого-то конкретного языка программирования. Как полагает Вульф (Wulf) [1], язык программирования служит трем целям.


  • Это инструмент проектирования.
  • Это средство выражения идей программиста
  • Это инструмент для записи команд, управляющих компьютером

В настоящее время существуют более 2 500 разных языков программирования высокого уровня. Это разнообразие объясняется тем, что каждый из этих языков разрабатывался для использования в определенных предметных областях. Более того, появление очередного нового языка программирования позволяет разработчикам приступить к решению все более и более сложных задач. Исследуя ранее не изученные области применения, разработчики языков получили возможность уточнить свои представления о том, что важно для языка программирования, а что нет. Кроме того, на эволюцию языков программирования значительное вли­яние оказали достижения теории вычислений, которые позволили формализовать семантику операторов, модулей, абстрактных типов данных и процессов.

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

Общим предком почти всех современных объектных и объектно-ориентиро­ванных языков является язык Simula, разработанный в 1960-х годах Даалем (Dahl), Мирхургом (Myrhurg) и Нигардом (Nygard). Язык Simula развил идеи языка ALGOL, дополнив их концепцией инкапсуляции и наследования. Вероятно, наи­более важным обстоятельством является то, что язык Simula, предназначенный для моделирования и описания систем, заложил правила написания программ, отражающие словарь изучаемой предметной области.

Генеалогия наиболее важных и распространенных объектных и объектно-ори­ентированных языков программирования продемонстрирована на рис. 1, заим­ствованном с Web-сайта Эрика Левенеца (Eric Levenez), посвященного истории языков программирования. Величина прямоугольника отражает интенсивность разработки или использования языков в общей предметной области, а стрелочки изображают влияние, которое языки оказывали на разработку других языков.

Рисунок 1 – Генеалогия наиболее важных языков программирования.

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


Одним из новаторских способов оценки популярности языков программиро­вания является индекс программистского сообщества ТIOВЕ (TCP-Index). Он основан на сканировании Web-страниц и групп новостей в сети Интернет. Исполь­зуя простые запросы, касающиеся исследуемого языка программирования, можно определить процентную долю Web-страниц, представляющих интерес, и сравнить эти результаты с данными, полученными ранее, по месяцам и годам. В таблице 1 приведены результаты данного исследования за октябрь 2013 года.

Таблица 1 Результаты определения популярности современных языков программирования.

Место

Язык программирования

Рейтинг, %

1

C

17.246%

2

Java

16.107%

3

Objective-C

8.992%

4

C++

8.664%

5

PHP

6.094%

6

C#

5.718%

7

(Visual) Basic

4.819%

8

Python

3.107%

9

Transact-SQL

2.621%

10

JavaScript

2.038%

11

Visual Basic .NET

1.933%

12

Perl

1.607%

13

Ruby

1.246%

14

Pascal

0.753%

15

PL/SQL

0.730%

16

Lisp

0.725%

17

Delphi/Object Pascal

0.701%

18

Groovy

0.658%

19

MATLAB

0.614%

20

COBOL

0.599%

Ниже описаны наиболее важные языки программирования.

Язык Smalltalk был разработан членами исследовательской группы Xerox Palo Alto Research Center Learning Research Group как элемент утопического проекта Dynabook, предложенного Аланом Кэем (Alan Kay). Основное влияние на этот проект оказали идеи языка программирования Simula, хотя в определенной степени в нем использовались принципы языка FLEX, а также результаты работ Сеймура Пэперта (Seymore Papert) и Уаллеса Фойрзайга (Wallace Feurzeig). Smalltalk представляет собой и язык программирования, и среду разработки программ. Он является чисто объектно-ориентированным языком программирования, в котором абсолютно все сущности считаются объектами. Даже целые числа в языке Smalltalk представляют собой классы. Наряду с языком Simula язык Smalltalk является, вероятно, важнейшим объектно-ориентированным языком программирования, поскольку его идеи оказали влияние не только на практически все последующие языки программирования (хотя сам Smalltalk теперь используется редко), но и легли в основу современных графических интерфейсов пользователя, таких как Macintosh, Windows, KDE и Gnome, получивших общее признание.