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

Содержание

Слайд 2

ВСПОМИНАЯ ПЕРВУЮ ЛЕКЦИЮ

Люди разделяют на классы уже существующие объекты, находят общие свойства

ВСПОМИНАЯ ПЕРВУЮ ЛЕКЦИЮ Люди разделяют на классы уже существующие объекты, находят общие
у объектов, и дают этой группе похожих объектов имя.

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

красные

синие

кружочки

Кружок имеет:
Цвет
Размер

Слайд 3

ПРОСТЫЕ ПОНЯТИЯ

Объект - Любое существующее нечто, с чем мы можем как-то взаимодействовать.

ПРОСТЫЕ ПОНЯТИЯ Объект - Любое существующее нечто, с чем мы можем как-то
Что угодно. Вообще что угодно. Ну совсем.

Класс – описание некоторого семейства объектов, правила работы этого объекта, его внутреннее устройство, чертеж,

Слайд 4

УМНОЕ ХРАНИЛИЩЕ КНИГ

УМНОЕ ХРАНИЛИЩЕ КНИГ

Слайд 5

КНИГА – ЭТО ОБЪЕКТ, ОНА СУЩЕСТВУЕТ

КНИГА – ЭТО ОБЪЕКТ, ОНА СУЩЕСТВУЕТ

Слайд 6

ХРАНИЛИЩЕ КНИГ – ТОЖЕ ОБЪЕКТ

Само хранилище же существует, и имеет внутри себя

ХРАНИЛИЩЕ КНИГ – ТОЖЕ ОБЪЕКТ Само хранилище же существует, и имеет внутри
много книг, других объектов, на минуточку

Слайд 7

НО ПРОГРАММА ПОНЯТИЯ НЕ ИМЕЕТ НИ ПРО КНИГУ, НИ ПРО ХРАНИЛИЩЕ ТЕМ

НО ПРОГРАММА ПОНЯТИЯ НЕ ИМЕЕТ НИ ПРО КНИГУ, НИ ПРО ХРАНИЛИЩЕ ТЕМ
БОЛЕЕ

Надо объяснить, что такое книга и что такое хранилище.

Слайд 8

КЛАСС КАК РАЗ И ОПРЕДЕЛЯЕТ МОДЕЛЬ КНИГИ

У нашей книги есть несколько параметров
Название
Имя

КЛАСС КАК РАЗ И ОПРЕДЕЛЯЕТ МОДЕЛЬ КНИГИ У нашей книги есть несколько
автора
Сам текст, который содержится

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

Слайд 9

КЛАСС ХРАНИЛИЩА

Хранилище должно содержать в себе
Список книг

Оно должно уметь
Добавлять новые книги в

КЛАСС ХРАНИЛИЩА Хранилище должно содержать в себе Список книг Оно должно уметь
хранилище
Удалять определенную книгу
Произвести выборку по какому-то критерию

Слайд 10

А КАК МЫ МОЖЕМ УЗНАТЬ, ЧТО НАХОДИТСЯ В КНИГЕ?

Вывести на консоль
Отправить информацию

А КАК МЫ МОЖЕМ УЗНАТЬ, ЧТО НАХОДИТСЯ В КНИГЕ? Вывести на консоль
по почте
Сохранить информацию о книге в файл
Отобразить информацию на WEB странице

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

Слайд 11

РЕШЕНИЕ – ИНТЕРФЕЙС(INTERFACE)

Наш интерфейс должен только говорить, что такой-то объект умеет представлять

РЕШЕНИЕ – ИНТЕРФЕЙС(INTERFACE) Наш интерфейс должен только говорить, что такой-то объект умеет
книгу. Не более.

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

Слайд 12

Interface
IBookPresenter
Контракт

Class
ConsolePresenter
Описание исполнителя

Class
FilePresenter
Описание исполнителя

Удовлетворяют контракту

Interface IBookPresenter Контракт Class ConsolePresenter Описание исполнителя Class FilePresenter Описание исполнителя Удовлетворяют контракту

Слайд 13

А ОТКУДА У НАС ВОЗЬМУТСЯ НОВЫЕ КНИГИ?

Создаем интерфейс IBooksFabrik
Он будет иметь так

А ОТКУДА У НАС ВОЗЬМУТСЯ НОВЫЕ КНИГИ? Создаем интерфейс IBooksFabrik Он будет
же всего одно действие, а именно GetNewBook, которое будет возвращать новый экземпляр книги

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

Слайд 14

МЫ ПОПРОБУЕМ ДВА СПОСОБА ПОЛУЧЕНИЯ НОВОЙ КНИГИ

Ввод своими руками в консоль.
Рандомная генерация

МЫ ПОПРОБУЕМ ДВА СПОСОБА ПОЛУЧЕНИЯ НОВОЙ КНИГИ Ввод своими руками в консоль.
книги из изначально заданного набора возможных слов.

Слайд 15

КОДИМ

КОДИМ

Слайд 16

А ТЕПЕРЬ МЫ ХОТИМ ЧТОБЫ НАШИ КНИГИ НЕ ПРОПАДАЛИ ПРИ ЗАКРЫТИИ ПРОГРАММЫ!

Но

А ТЕПЕРЬ МЫ ХОТИМ ЧТОБЫ НАШИ КНИГИ НЕ ПРОПАДАЛИ ПРИ ЗАКРЫТИИ ПРОГРАММЫ!
как-бы поведение, когда книги хранятся у нас в оперативе тоже нужно…

Слайд 17

АБСТРАКТНЫЙ КЛАСС!!!

Абстрактный класс это такой класс, такое описание объекта(сущности) который не знает,

АБСТРАКТНЫЙ КЛАСС!!! Абстрактный класс это такой класс, такое описание объекта(сущности) который не
как конкретно должен делать некоторые свои действия

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

Слайд 18

ПОЛУЧИТСЯ ТАКАЯ ИСТОРИЯ

Абстрактный класс BookStorage имеет в себе логику выборки по некоторому

ПОЛУЧИТСЯ ТАКАЯ ИСТОРИЯ Абстрактный класс BookStorage имеет в себе логику выборки по
критерию, И логику отображения книг с использованием IPResenter
И он имеет абстрактные методы для добавления удаления и получения книг.

А уже конкретные классы RuntimeStorage и InFileStorage будут реализовывать методы хранения книг.