Слайд 1Тема лекции №8
Объектно-ориентированное программирование как инструмент для моделирования транспортных процессов
Слайд 2Цель лекции - изучить особенности объектно-ориентированного программирования
План лекции.
Основные понятия.
Принципы ООП.
Особенности
реализации ООП.
Объектно-ориентированные языки.
Слайд 31. Основные понятия
Объе́ктно-ориенти́рованное программирование (ООП) — методология программирования, основанная на представлении
программы в виде совокупности объектов, каждый из которых является экземпляром определенного класса,
а классы образуют иерархию наследования.
Слайд 4 Особенности определения:
1) объектно-ориентированное программирование использует в качестве основных логических конструктивных элементов
объекты, а не алгоритмы;
2) каждый объект является экземпляром определенного класса;
3) классы
образуют иерархии.
Программа считается объектно-ориентированной, только если выполнены все три указанных требования.
Слайд 5Класс - универсальный, комплексный тип данных, состоящий из тематически единого набора
«полей» (переменных более элементарных типов) и «методов» (функций для работы
с этими полями), то есть он является моделью информационной сущности с внутренним и внешним интерфейсами для оперирования своим содержимым (значениями полей).
Класс - это шаблон, описание ещё не созданного объекта. Класс содержит данные, которые описывают строение объекта и его возможности, методы работы с ним.
Слайд 6Объект - некоторая сущность в компьютерном пространстве, обладающая определённым состоянием и
поведением, имеющая заданные значения свойств (атрибутов) и операций над ними
(методов). Как правило, при рассмотрении объектов выделяется то, что объекты принадлежат одному или нескольким классам, которые определяют поведение (являются моделью) объекта.
Объект — экземпляр класса. То, что «рождено» по «чертежу», то есть по описанию из класса.
В качестве примера объекта и класса можно привести технический чертёж для изготовления детали — это класс. Выточенная же на станке по размерам и указаниям из чертежа деталь - объект.
Слайд 7Модульность - это такая организация объектов, когда они заключают в себе полное
определение их характеристик, никакие определения методов и свойств не должны
располагаться вне его, это делает возможным свободное копирование и внедрение одного объекта в другие.
Слайд 8Событие в объектно-ориентированном программировании - это сообщение, которое возникает в различных точках
исполняемого кода при выполнении определённых условий.
События предназначены для того,
чтобы иметь возможность предусмотреть реакцию программного обеспечения.
Для решения поставленной задачи создаются обработчики событий: как только программа попадает в заданное состояние, происходит событие, посылается сообщение, а обработчик перехватывает это сообщение.
Слайд 92. Принципы ООП.
Абстракция — способ выделения самых значимых характеристик объекта,
при этом менее значимые отбрасываются.
В ООП абстракция - работа
только со значимыми характеристиками. Суть этого принципа в том, чтобы отделить составные объекты, состоящие из «меньших» объектов, от этих самых объектов, то есть от их составляющих.
Такой подход позволяет работать непосредственно с объектом, не вдаваясь в подробности, из чего же он состоит и как работает.
Слайд 10Инкапсуляция — свойство системы, позволяющее объединить данные и методы, работающие с
ними, в классе.
Инкапсуляция - принцип объектно-ориентированного программирования, позволяющий собрать объект в
пределах одной структуры или массива, убрав способ обработки данных и сами данные от «чужих глаз».
Инкапсуляцию применяют:
когда нужно сохранить некоторый участок кода без изменений со стороны пользователя;
когда нужно ограничить доступ к коду - в связи с уникальностью используемых техник, которые автор хочет оставить «при себе»;
когда изменение кода повлечёт за собой неработоспособность программы или её взлом.
Слайд 11Наследование — свойство системы, позволяющее описать новый класс на основе уже
существующего с частично или полностью заимствующейся функциональностью.
Класс, от которого
производится наследование, называется базовым, родительским или суперклассом. Новый класс — потомком, наследником, дочерним или производным классом.
Наследование — способность в объектно-ориентированном программировании построить новый класс на основе уже заданного. При этом функционал может как полностью совпадать, так и отличаться. Класс-донор называется в таком случае родительским или базовым, а его «потомок» — наследником, дочерним классом.
Слайд 12Полиморфизм — свойство системы, позволяющее использовать объекты с одинаковым интерфейсом без
информации о типе и внутренней структуре объекта.
Полиморфизм — способность объектов
самим определять, какие методы они должны применить в зависимости от того, где именно в коде они находятся. То есть, объект может изменяться в зависимости от своего местоположения и действовать по-разному, что позволяет не заводить лишних структур. Иначе говоря: один интерфейс — множество решений.
Полиморфизм позволяет повысить процент повторного использования кода и сократить тем самым размер программы и временные затраты на её написание.
Слайд 13 В связи со своими особенностями объектно-ориентированное программирование имеет ряд
преимуществ перед другими видами программирования:
1) Использование одного и того же
программного кода с разными данными. Классы позволяют создавать множество объектов, каждый из которых имеет собственные значения атрибутов.
2) Наследование и полиморфизм позволяют не писать новый код, а настраивать уже существующий, за счет добавления и переопределения атрибутов. Это ведет к сокращению объема исходного кода.
Слайд 143. Особенности реализации ООП.
В современных объектно-ориентированных языках программирования каждый объект
является значением, относящимся к определённому классу. Класс представляет собой объявленный программистом
составной тип данных, имеющий в составе:
Поля данных
Параметры объекта (конечно, не все, а только необходимые в программе), задающие его состояние (свойства объекта предметной области). Физически поля представляют собой значения (переменные, константы), объявленные как принадлежащие классу.
Методы
Процедуры и функции, связанные с классом. Они определяют действия, которые можно выполнять над объектом такого типа, и которые сам объект может выполнять.
Слайд 15Классы могут наследоваться друг от друга. Класс-потомок получает все поля
и методы класса-родителя, но может дополнять их собственными либо переопределять
уже имеющиеся.
Интерфейс — это класс без полей и без реализации, включающий только заголовки методов.
Если некий класс наследует (или, как говорят, реализует) интерфейс, он должен реализовать все входящие в него методы.
Использование интерфейсов предоставляет относительно дешёвую альтернативу множественному наследованию.
Слайд 16Инкапсуляция обеспечивается следующими средствами:
Контроль доступа
Поскольку методы класса могут быть как
чисто внутренними, обеспечивающими логику функционирования объекта, так и внешними, с
помощью которых взаимодействуют объекты, необходимо обеспечить скрытость первых при доступности извне вторых. Для этого в языки вводятся специальные синтаксические конструкции, явно задающие область видимости каждого члена класса.
Методы доступа
Поля класса в общем случае не должны быть доступны извне, поскольку такой доступ позволил бы произвольным образом менять внутреннее состояние объектов. Поэтому поля обычно объявляются скрытыми (либо язык в принципе не позволяет обращаться к полям класса извне), а для доступа к находящимся в полях данным используются специальные методы, называемые методами доступа.
Слайд 17Свойство - способ доступа к внутреннему состоянию объекта, имитирующий переменную некоторого типа.
Обращение к свойству объекта реализовано через вызов функции. При попытке
задать значение данного свойства вызывается один метод, а при попытке получить значение данного свойства — другой.
При применении свойств:
можно задать значение по умолчанию, которое будет храниться в данном свойстве (или указать, что никакого значения по умолчанию не предполагается);
можно указать, что это свойство только для чтения.
Как правило, свойство связано с некоторым внутренним полем объекта. Но свойству вообще может не быть сопоставлена ни одна переменная объекта, хотя пользователь данного объекта имеет дело с ним так, как если бы это было настоящее поле.
Слайд 184. Объектно-ориентированные языки
Объектно-ориентированный язык программирования - язык, построенный на принципах ООП.
Как правило,
объектно-ориентированный язык (ООЯ) содержит следующий набор элементов:
Объявление классов с полями
(данными — членами класса) и методами (функциями — членами класса).
Механизм расширения класса (наследования) — порождение нового класса от существующего с автоматическим включением всех особенностей реализации класса-предка в состав класса-потомка. Большинство ООЯ поддерживают только единичное наследование.
Полиморфные переменные и параметры функций (методов), позволяющие присваивать одной и той же переменной экземпляры различных классов.
Полиморфное поведение экземпляров классов за счёт использования виртуальных методов. В некоторых ООЯ все методы классов являются виртуальными.
Слайд 19Некоторые языки добавляют к указанному минимальному набору дополнительные средства:
Конструкторы, деструкторы,
финализаторы;
Свойства (аксессоры);
Индексаторы;
Средства управления видимостью компонентов классов
Слайд 20Одни языки отвечают принципам ООП в полной мере — в них
все основные элементы являются объектами, имеющими состояние и связанные методы.
Примеры подобных языков — Smalltalk, Eiffel.
Существуют гибридные языки, совмещающие объектную подсистему в целостном виде с подсистемами других парадигм как «два и более языка в одном», позволяющие совмещать в одной программе объектные модели с иными, и размывающие грань между объектно-ориентированной и другими парадигмами за счёт нестандартных возможностей, балансирующих между ООП и другими парадигмами (таких как множественная диспетчеризация, параметрические классы, возможность манипулировать методами классов как самостоятельными объектами, и др.). Примеры таких языков: CLOS, Dylan, OCaml, Python, Ruby, Objective-C.
Однако, наиболее распространены языки, включающие средства эмуляции объектной модели поверх более традиционной императивной семантики. Примеры таких языков — Симула, C++, Visual Basic, Delphi, Модула, Модула-2, Java, C#, PHP.
Слайд 21Создание проекта в среде MS Visual Studio (Пример работы языка
С#)
https: // www.visualstudio.com / ru-ru / downloads / download-visual-studio-vs.aspx