Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ТиТП.doc
Скачиваний:
6
Добавлен:
17.09.2019
Размер:
161.79 Кб
Скачать

9. Объектно-ориентированный подход к проектированию программных продуктов

1. Выделение классов объекта.

2. Установка характерных свойств объектов и методов их обработки.

3. Создание иерархии классов, наследовании свойств объектов и методов их обработки.

Положения объектного подхода:

1. Объектно-ориентированный анализ предметной области.

2. Объектно-ориентированное проектирование.

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

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

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

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

Технология, ориентированная на информационное моделирование сначала специфицирует данные, затем описывает процессы, использующие эти данные.

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

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

10 Принципы объектно-ориентированного программирования:

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

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

  • Полиморфизм

История возникновения ООП:

67г. – появление языков 3-его поколения (языки высшего уровня). Возник язык программирования Симула-1 – первый язык на ООП. В данном языке появился новый тип, который назывался объект. В объекте одновременно описывались данные (поля) и процедуры для их обработки. Родственные объекты объединялись в классы. На базе Симула-1 появился Симула-67.

Преимущества ООП:

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

  • Декомпозиция – разделение сложных схем в подсхемы

  • Модуль ООП – файл описания объектов и действий над ними. Благодаря модульной структуре уменьшается или исчезает область глобальных данных.

  • Интерфейс – набор форматов допустимых сообщений

  • Инкапсуляция объектов позволяет использовать только допустимый интерфейс. Все объекты являются представителями класса.

  • Наследование. Классы могут быть организованы в иерархическую структуру с наследованием свойств.

Фундаментальные характеристики объектно-ориентированного мышления:

  1. Любой предмет или явление могут рассматриваться как объект

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

  3. Объекты могут иметь открытые по интерфейсу методы обработки сообщений

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

  5. Каждый объект является представителем класса, который выражает свойства объектов отдельного класса. В классе методов задают поведение объекта. Все объекты могут выполнять одно и те же действия.

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

  7. Благодаря полиморфизму одни и те же объекты могут разными методами исполнять одни и те же запросы сообщений.

  8. композиция – предпочтительная альтернатива множественному наследованию, позволяет изменять состав объектов агрегата в процессе выполнения программы.

  9. Структура объектно-ориентировочной программы на этапе выполнения имеет сильные различия статического исходного кода.

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

Способность прятать детали реализации объектов от пользователей.

Класс DBReader работает с базой данных. Методы класса:

DBReader f=new DBReader ();

f.Open (@ “имя файла, который мы открываем для чтения»);

f.Close ();// закрытие файла, имя не указывается.

Класс DBReader инкапсулирует внутренние подробности того, как он обнаруживает, загружает, выполняет операции и закрывает файл данных.

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

12. Наследование;

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

(System.Object)- базовый класс

При создании класса необходимо определить свойства этого класса, поля и методы, которые являются общими для данного класса. Когда классы связывают друг с другом отношениями наследования => между ними устанавливаются отношения «быть». Такой тип называется к лассическим наследованием. Еще используется форма повторного кода – включение, делегирование. При использовании этой формы один класс включает в свой состав другой класс и открывает внешнему миру возможности внутреннего класса.

void TurnOnRadio (bool on)

//делегируем внутринему классу

{RadioObjPower (on);}

//внутр. Класс радио инкапсулирован классом (внешним) автомобиль

Car Viper=new Car ();

// вызов будет передан внутреннему объекту

Viper.TurnOnRadio (false); радио

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

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

Кратко смысл полиморфизма можно выразить фразой: «Один интерфейс, множество реализаций».

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

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

внешняя общность проявляется как одинаковый набор методов с одинаковыми именами и сигнатурами (именем методов и типами аргументов и их количеством);

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

В объектно-ориентированных языках класс является абстрактным типом данных.[Прим. 1] Полиморфизм реализуется с помощью наследования классов и виртуальных функций. Класс-потомок наследует сигнатуры методов класса-родителя, а реализация, в результате переопределения метода, этих методов может быть другой, соответствующей специфике класса-потомка. Другие функции могут работать с объектом класса-родителя, но при этом вместо него во время исполнения будет подставляться один из классов-потомков. Это называется поздним связыванием.

Класс-потомок сам может быть родителем. Это позволяет строить сложные схемы наследования — древовидные или сетевидные.

Абстрактные (или чисто виртуальные) методы не имеют реализации вообще (на самом деле некоторые языки, например C++, допускают реализацию абстрактных методов в родительском классе). Они специально предназначены для наследования. Их реализация должна быть определена в классах-потомках.

Класс может наследовать функциональность от нескольких классов. Это называется множественным наследованием. Множественное наследование создаёт известную проблему (в C++), когда класс наследуется от нескольких классов-посредников, которые в свою очередь наследуются от одного класса (так называемая «Проблема ромба»): если метод общего предка был переопределён в посредниках, неизвестно, какую реализацию метода должен наследовать общий потомок. Решается эта проблема путём отказа от множественного наследования для классов и разрешением множественного наследования для полностью абстрактных классов (то есть интерфейсов) (C#, Delphi, Java), либо через виртуальное наследование (C++).

14. Функциональное программирование

В функциональном программировании отсутствует понятие времени. Программы являются выражениями, исполнение программ заключается в вычислении этих выражений. Практически все математики, сами того не замечая, занимаются функциональным программированием, описывая, например, чему равно абсолютное значение произвольного вещественного числа. Императивное программирование основано на машине Тьюринга-Поста - абстрактном вычислительном устройстве, предложенном на заре алгоритмической эры для описания алгоритмов. Функциональное программирование основано на более естественном с математической точки зрения формализме - лямбда-исчислении Черча.

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

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