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

Содержание

Слайд 2

ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ. Программирование — не такое уж приятное занятие, как может

ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ.

Программирование — не такое уж приятное занятие, как может показаться

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

Способ борьбы с этими неприятностями называется «объектно-ориентированное программирование» (ООП).

Способ борьбы с этими неприятностями называется
«объектно-ориентированное программирование»
(ООП).

Слайд 4

Идея объектно-ориентированного программирования возникло в результате естественной эволюции более ранних нововведений

Идея объектно-ориентированного программирования

возникло в результате естественной эволюции более ранних нововведений в

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

ООП представляет собой способ программирования, который напоминает процесс человеческого мышления

Слайд 5

Основные свойства объектов Объектно-ориентированный язык программирования характеризуется тремя основными свойствами: Инкапсуляция

Основные свойства объектов

Объектно-ориентированный язык программирования характеризуется тремя основными свойствами:

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

объединение записей с

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

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

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

Полиморфизм

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

Слайд 6

Начиная с версии 5.5, Турбо-Паскаль предоставляет программисту все средства объектно-ориентированного программирования

Начиная с версии 5.5, Турбо-Паскаль предоставляет программисту все средства объектно-ориентированного программирования

которые встроены непосредственно в язык.
высокую степень cтруктурированности,
модульность,
абстрактность,
возможность повторного использования (наследования)
Слайд 7

ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ. Программы, написанные с использованием ООП, являются более гибкими и

ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ.

Программы, написанные с использованием ООП, являются более гибкими и более

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

Что такое объекты?

Что такое
объекты?

Слайд 9

ВЕСЬ ОКРУЖАЮЩИЙ НАС МИР СОСТОИТ ИЗ ОБЪЕКТОВ Это предметы живой и

ВЕСЬ ОКРУЖАЮЩИЙ НАС МИР СОСТОИТ ИЗ ОБЪЕКТОВ

Это предметы живой и неживой

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

ОБЪЕКТЫ ЯВЛЯЮТСЯ ВЫСШИМ УРОВНЕМ АБСТРАКЦИИ ДАННЫХ Объект можно разделить на части,

ОБЪЕКТЫ ЯВЛЯЮТСЯ ВЫСШИМ УРОВНЕМ АБСТРАКЦИИ ДАННЫХ

Объект можно разделить на части, но

тогда он перестанет быть объектом.
Отношения частей к целому и взаимоотношения между частями становятся понятнее тогда, когда все содержится вместе как единое целое.
Это называется инкапсуляцией и является очень важным понятием.
Слайд 11

ОБЪЕКТЫ МОГУТ НАСЛЕДОВАТЬ ХАРАКТЕРИСТИКИ И ПОВЕДЕНИЕ ДРУГИХ ОБЪЕКТОВ Объекты, характеристики и

ОБЪЕКТЫ МОГУТ НАСЛЕДОВАТЬ ХАРАКТЕРИСТИКИ И ПОВЕДЕНИЕ ДРУГИХ ОБЪЕКТОВ

Объекты, характеристики и поведение

которых наследуются, называются порождающими или родительскими объектами (или "предками").
Здесь происходит качественный скачок — наследование, которое, возможно, является сегодня единственным самым крупным различием между обычным программированием на Паскале и объектно-ориентированным программированием в Турбо Паскале.
Слайд 12

Иерархия объектов

Иерархия
объектов

Слайд 13

ИЕРАРХИЯ ОБЪЕКТОВ Чем этот объект похож на другие объекты из общего

ИЕРАРХИЯ ОБЪЕКТОВ

Чем этот объект похож на другие объекты из общего класса?
Чем

он отличается от других объектов?
Слайд 14

Иерархия объектов Каждый конкретный класс имеет свои особенности поведения и характеристик,

Иерархия объектов

Каждый конкретный класс имеет свои особенности поведения и характеристик, определяющих

этот класс.

Например, класс геометрических фигур можно представить как два подкласса:
плоские фигуры
объемные фигуры.

Плоские фигуры могут иметь вершины и не иметь их.
Не имеющие вершин плоские фигуры представляются окружностями и эллипсами.

Слайд 15

Задавая себе приведенные выше вопросы, программист продвигается от вершины иерархического дерева

Задавая себе приведенные выше вопросы, программист продвигается от вершины иерархического дерева

данного класса и проходит по дочерним подклассам.
Слайд 16

ИЕРАРХИЯ ОБЪЕКТОВ Наивысший уровень — самый общий, а вопросы самые простые.

ИЕРАРХИЯ ОБЪЕКТОВ

Наивысший уровень — самый общий, а вопросы самые простые.

Например: фигуры

плоские или объемные?

Каждый последующий уровень более специфический, чем предыдущий, и менее общий.

На самом последнем уровне программист определяет конкретные детали объекта.

Цвет, стиль заполнения, величину радиуса окружности и т.д.

Слайд 17

Иерархия геометрических фигур

Иерархия геометрических фигур

Слайд 18

При использовании ООП следует помнить утверждение: если характеристика однажды определена, то

При использовании ООП следует помнить утверждение:

если характеристика однажды определена, то все

категории, расположенные ниже данного определения, содержат эту характеристику.

Поэтому, если определена окружность, то нет необходимости узнавать, сколько у нее вершин, т.к. она относится к подклассу фигур, не имеющих вершин.

Слайд 19

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

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

Слайд 20

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

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

Слайд 21

НАСЛЕДОВАНИЕ В терминах Паскаля объект наиболее схож с типом RECORD, который

НАСЛЕДОВАНИЕ

В терминах Паскаля объект наиболее схож с типом RECORD, который является

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

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

Слайд 22

Наследование Каждое значение присвоенное переменной TPerson, является экземпляром типа RECORD. Запись

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

Каждое значение присвоенное переменной TPerson, является экземпляром типа RECORD.

Запись можно организовать

следующим образом:

TPerson = RECORD
Name : STRING[30];
Date : STRING[10];
Rate : REAL;
END;

где переменная TPerson определена как запись.

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

Слайд 23

TPerson представляет два уровня абстракции. Можно рассматривать поля Name, Date и

TPerson представляет два уровня абстракции.
Можно рассматривать поля
Name, Date и

Rate по отдельности
Когда речь идет о полях, работающих одновременно для описания конкретного человека, можно рассматривать их совокупность как TPerson
Слайд 24

Наследование Предположим, что Ваша программа должна учитывать выплату денег студентам, преподавателям

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

Предположим, что Ваша программа должна учитывать выплату денег студентам, преподавателям и

сотрудникам кафедры.

В каждой группе выплаты производятся особым способом.

Можно создать другой тип записи для каждой группы.

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

Можно построить запись TStudent вида:

TStudent = RECORD
Name : STRING[30];
Date : STRING[10];
Rate : REAL;
Ball : REAL;
END;

Слайд 25

Наследование Однако, проявив немного сообразительности, можно сохранить тип TPerson путем создания

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

Однако, проявив немного сообразительности, можно сохранить тип TPerson путем создания поля

типа TPerson внутри типа TStudent

TStudent = RECORD
Student : Tperson;
Ball : REAL;
END;

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

Но она не учитывает специфику данных, обрабатываемых в программе.

Слайд 26

имя, фамилию, год рождения ему полагается определенная сумма денег. Наследование Необходимо

имя,
фамилию,
год рождения
ему полагается определенная сумма денег.

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

Необходимо установить, чем

выплата денег студентам отличается от выплаты другим лицам, а в чем их сходство.

Студент, как и преподаватель или другой служащий кафедры, имеет:

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

Слайд 27

Наследование Для студента тип TStudent должен содержать все поля, которые даются

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

Для студента тип TStudent должен содержать все поля, которые даются в

записи TPerson, при этом тип TStudent является типом-потомком для типа TPerson.

TStudent наследует все, что принадлежат TPerson, и, кроме того, имеет новые поля, которые делают TStudent уникальным.

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

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

Слайд 28

Наследование Одним из элементов языка Турбо-Паскаль является новая категория структуры данных,

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

Одним из элементов языка Турбо-Паскаль является новая категория структуры данных, связанная

с записями, которая значительно мощнее предыдущей.

Типы данных в этой новой категории определяются с помощью нового зарезервированного слова OBJECT.

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

Слайд 29

Наследование В нашем примере два связанных типа объектов могли бы определяться

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

В нашем примере два связанных типа объектов могли бы определяться следующим

образом:

ТУРЕ
TPerson = OBJECT
Name : STRING[30] ;
Date : STRING[10];
Rate : REAL;
END;
TStudent = OBJECT(TPerson)
Ball : REAL;
END;

Здесь TPerson является родительским типом, a TStudent — дочерним.

Фактически, этот процесс может продолжаться сколь угодно долго. К дочернему типу TStudent при необходимости можно определить еще один дочерний тип.

Чаще всего создание объектно-ориентированных прикладных программ состоит в построении такой иерархии объектов.

Слайд 30

Наследование Все типы, наследующие тип TPerson, называются его дочерними типами, но

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

Все типы, наследующие тип TPerson, называются его дочерними типами,
но TStudent

является непосредственным дочерним типом от TPerson,
a TPerson является непосредственным родителем типа TStudent.

Тип объекта (так же как и подкаталог DOS) может иметь любое число непосредственных дочерних типов и только одного непосредственного родителя.

Слайд 31

Экземпляры типа OBJECT.

Экземпляры типа OBJECT.

Слайд 32

Экземпляры типа OBJECT. Экземпляры типа OBJECT описываются так же, как в

Экземпляры типа OBJECT.

Экземпляры типа OBJECT описываются так же, как в Паскале

описывается любая статическая или динамическая переменная, ссылающаяся на размещенную в динамической памяти переменную:

ТУРЕ
PStudent = ^TStudent;
VAR
Stat_St : TStudent;
Din_St : PStudent;

Перед использованием переменной Din_St необходимо выделить память для нее с помощью функции New

Слайд 33

Поля объектов

Поля объектов

Слайд 34

с помощью оператора WITH, используя префикс с именем объекта Поля объектов

с помощью оператора WITH,
используя префикс с именем объекта

Поля объектов

Например:

Student.Ball:= 4.5;
WITH

Student DO
BEGIN
Name:='Иванов Николай Петрович';
Date:='25-06-1995';
END;

К полю объекта можно обратиться как к полю обычной записи :

Даже если поля Name, Date и Rate не являются частью описания типа TStudent (они наследуются от типа TPerson), на них можно ссылаться как на описанные в TStudent:

Student.Name := 'Николай Иванов';