скачать книгу бесплатно
Однако при этом возникали некоторые проблемы.
С глобальными данными возможно, что изменения в данных могут иметь побочные эффекты для программы.
Иногда подпрограммы запускались с теми данными, которые были не такими, как ожидалось.
Необходимость лучшего управления данными привела к изменениям в императивном программировании и появлению таких языков, как Algol 68 и Pascal в 1970-х годах.
Была введена идея локальных переменных.
Подпрограммы назывались процедурами, которые могут содержать вложенные процедуры.
И каждая процедура могла иметь свои собственные переменные.
Алгол 68 и Паскаль поддерживают понятие абстрактного типа данных, который является типом данных, который определен программистом и не встроен в язык.
Абстрактный тип данных представляет собой, по существу, сгруппированную связанную информацию, которая обозначается типом.
Это был способ организации данных.
Разработчики могли писать свое программное обеспечение с использованием этих типов аналогично встроенным типам языков.
Имея переменные в разных областях видимости, можно было разделить данные на разные процедуры.
Таким образом, процедура могла быть единственной, которая могла модифицировать эту часть данных, позволяя помещать данные в локальную область действия и не беспокоится о том, что они могли изменяться другой процедурой.
По мере того, как время обработки данных компьютерами становилось дешевле, а человеческий труд становился дороже, основным фактором в разработке программного обеспечения стал человеческий фактор.
И задачи становились все более сложными.
Это означало, что программное обеспечение становилось настолько большим, что, имея только один файл для всей программы, программу становилось трудно поддерживать.
Появились новые языки, такие как C и Modula-2, которые предоставили средства для организации программ и позволяли разработчикам легко создавать несколько уникальных копий своих абстрактных типов данных.
Теперь программы могли быть организованы в отдельные файлы.
В C каждый файл содержал все связанные с ним данные и функции, которые обрабатывали эти данные, и объявлял, к чему можно получить доступ с помощью отдельного файла, называемого файлом заголовка.
Но при этом еще существовали проблемы, которые не решались этими языками программирования.
Эти языки не позволяли абстрактному типу данных наследовать от другого типа данных.
Это означает, что можно было определять столько типов данных, сколько было нужно, но не нельзя было объявить, что один тип является расширением другого типа.
В 1980-х годах, при разработке программного обеспечения стали популярными концепции объектно-ориентированного дизайна, которые являются центральными для объектно-ориентированного программирования.
Цель объектно-ориентированного дизайна состоит в том, чтобы облегчить запись абстрактного типа данных, структурировать систему вокруг абстрактных типов данных, называемых классами, и ввести возможность абстрактного типа данных расширять другой, введя понятие, называемое наследованием.
С помощью объектно-ориентированной парадигмы программирования теперь можно было создавать программную систему, состоящую из полностью абстрактных типов данных.
Преимущество этого заключается в том, что система будет имитировать структуру задачи, а это означает, что любая объектно-ориентированная программа способна представить объекты или идеи реального мира с большей точностью.
Файлы классов заменили стандартные файлы в C и Modula-2.
Каждый класс определяет тип со связанными данными и функциями.
Эти функции также известны как методы.
Класс действует как фабрика, создавая отдельные объекты определенного типа.
Это позволяет разделять данные и как ими можно манипулировать в отдельные классы.
Объектно-ориентированное программирование стало преобладающей парадигмой программирования.
Популярные современные языки, такие как Java, C ++ и C #, основаны на объектах.
Объектно-ориентированный анализ (OOA) – это процедура определения требований к программному обеспечению и разработка спецификаций программного обеспечения с точки зрения объектной модели программной системы, которая включает в себя взаимодействующие объекты.
Основное различие между объектно-ориентированным анализом и другими формами анализа заключается в том, что в объектно-ориентированном подходе требования организуются вокруг объектов, которые объединяют как данные, так и функции.
Они моделируются по объектам реального мира, с которыми взаимодействует система.
В традиционных методах анализа два аспекта – функции и данные – рассматриваются отдельно.
Основными задачами объектно-ориентированного анализа (OOA) являются:
– Идентификация объектов
– Организация объектов путем создания диаграммы объектной модели
– Определение внутренних объектов или атрибутов объекта
– Определение поведения объектов, т. е. действий объектов
– Описание взаимодействия объектов
Объектно-ориентированный дизайн (OOD) предполагает реализацию концептуальной модели, созданной при объектно-ориентированном анализе.
В OOD концепции модели анализа, которые являются независимыми от технологии, отображаются на классы реализации, идентифицируются ограничения и разрабатываются интерфейсы, что приводит к модели для области решений, то есть подробному описанию того, как система должна быть построена на конкретных технологиях.
Детали реализации обычно включают в себя:
Реструктуризацию данных класса при необходимости,
Реализацию методов, то есть внутренних структур данных и алгоритмов,
Реализацию управления и реализацию ассоциаций.
Объектно-ориентированное программирование (ООП) – это парадигма программирования, основанная на объектах (имеющих как данные, так и методы), целью которых является использование преимуществ модульности и многоразового использования.
Объекты, которые обычно являются экземплярами классов, используются для взаимодействия друг с другом при разработке компьютерных программ.
Важными чертами объектно-ориентированного программирования являются:
– Подход снизу вверх в разработке программы.
– Программы организованы вокруг объектов, сгруппированных по классам.
– Акцентирование на данных с методами при работе с данными объекта.
– Взаимодействие объектов через функции.
– Повторное использование дизайна путем создания новых классов с помощью добавления функций к существующим классам.
Объектная модель, используемая объектно-ориентированной парадигмой, визуализирует элементы в программном приложении с точки зрения объектов.
И понятия объектов и классов неразрывно связаны между собой и составляют основу объектно-ориентированной парадигмы.
Объект является реальным элементом в объектно-ориентированной среде, который может иметь физическое или концептуальное существование.
Физическое существование – это например, клиент, автомобиль и т. д .
Или неосязаемое концептуальное существование – например, проект, процесс и т. д.
Каждый объект имеет идентичность, которая отличает ее от других объектов в системе. И состояние, которое определяет характерные свойства объекта, а также значения свойств, которыми обладает объект. А также поведение, которое представляет внешне видимые действия, выполняемые объектом с точки зрения изменений его состояния.
Класс представляет собой совокупность объектов, имеющих одни и те же свойства, и которые демонстрируют общее поведение.
Класс дает схему или описание объектов, которые могут быть созданы из него.
Создание объекта как члена класса называется экземпляром.
Таким образом, объект является экземпляром класса.
Класса состоит из набора атрибутов для объектов, которые должны быть созданы из класса.
Разные объекты класса имеют разные значения атрибутов. И атрибуты часто называются данными экземпляра класса.
И класс состоит из набора операций, которые отображают поведение объектов класса.
Операции также называются функциями или методами.
Инкапсуляция – это процесс связывания как атрибутов, так и методов вместе внутри класса.
Благодаря инкапсуляции внутренние детали класса могут быть скрыты извне.
И инкапсуляция позволяет доступ к элементам класса извне только через интерфейс, предоставляемый классом.
Как правило, класс разработан таким образом, что его данные (атрибуты) могут быть доступны только через методы класса и изолированы от прямого внешнего доступа.
Этот процесс изоляции данных объекта называется скрытием данных.
Любое приложение требует целого ряда объектов, взаимодействующих между собой. И объекты в системе могут взаимодействовать друг с другом, используя передачу сообщений. И сообщение, проходящее между двумя объектами, как правило, однонаправлено.
Передача сообщений позволяет осуществлять все взаимодействия между объектами.
И передача сообщения по существу включает вызов метода класса.
Наследование – это механизм, позволяющий создавать новые классы из существующих классов путем расширения и уточнения их возможностей.
Существующие классы называются базовыми классами, родительскими классами или суперклассами, а новые классы называются производными классами, дочерними классами или подклассами.
Подкласс может наследовать атрибуты и методы суперкласса при условии, что суперкласс позволяет это.
Кроме того, подкласс может добавлять свои собственные атрибуты и методы и может модифицировать любой из методов суперкласса.
Наследование определяет отношение «is-a».
Полиморфизм в объектно-ориентированной парадигме подразумевает использование операций по-разному, в зависимости от того, в каком экземпляре они работают.
Полиморфизм позволяет объектам с разными внутренними структурами иметь общий внешний интерфейс.
И полиморфизм особенно эффективен при реализации наследования.
Обобщение и специализация представляют собой иерархию отношений между классами, где подклассы наследуются от суперклассов.
В процессе обобщения общие характеристики классов объединяются для формирования класса на более высоком уровне иерархии, т. е. подклассы объединяются для формирования обобщенного суперкласса.
Специализация – это обратный процесс обобщения.
Здесь отличительные особенности групп объектов используются для формирования специализированных классов из существующих классов.
Можно сказать, что подклассы являются специализированными версиями суперкласса.
Ссылка представляет собой соединение, через которое объект взаимодействует с другими объектами.
Через ссылку один объект может вызывать методы или перемещаться по другому объекту.
Ссылка изображает взаимосвязь между двумя или более объектами.
Ассоциация – это группа ссылок, имеющих общую структуру и общее поведение.
Ассоциация изображает взаимосвязь между объектами одного или нескольких классов.
И ссылка может быть определена как экземпляр ассоциации.
Степень ассоциации обозначает количество классов, участвующих в соединении. И степень ассоциации может быть унарной, бинарной или тройной.
Унарное отношение связывает объекты одного и того же класса.