77991

Основные принципы ООП. Инкапсуляция. Понятие класса, объекта. Поля, методы, свойство объектов

Лекция

Информатика, кибернетика и программирование

Понятие класса объекта. Объект – это экземпляр какого-либо класса. Вы объявляете что новый класс TNewObject TNewObject clssTOldObject; является потомком или дочерним классом старого класса TOldObject называемого предком или родительским классом и добавляете к нему новые поля методы и свойства иными словами то что нужно при переходе от общего к частному. Унаследованные от класса-предка поля и методы доступны в дочернем классе; если имеет место совпадение имен методов то говорят что они перекрываются.

Русский

2015-02-05

48 KB

17 чел.

Основные принципы ООП. Инкапсуляция. Понятие класса, объекта. Поля, методы, свойство объектов

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

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

Прежде чем давать определение понятию объект, рассмотрим, что такое класс.

Класс – это определяемый пользователем тип, который включает в себя данные разных типов и операции над ними.

Объект – это экземпляр какого-либо класса.

Таким образом, класс – это описание, а объект – это то, что создано в соответствии с этим описанием. До создания объектно-ориентированных языков программирования, данные и операции над этими данными рассматривали как отдельные элементы. Что такое объект, достаточно просто можно понять, если вспомнить работу с записями. Записи состоят из полей, которые содержат данные разных типов (каждое поле записи имеет собственный тип данных).

Объекты – это тоже хранилища разных типов данных. Данные объекты называются полями (fields) и аналогичны полям записи. Но объекты в отличие от записей, содержат еще процедуры и функции, которые применимы к полям данного объекта. Эти процедуры и функции называются методами (methods). Изменять поля объекта можно при помощи свойств (properties) объекта. Каждое свойство объекта в Delphi представляет собой поле и методы, которые позволяют считывать значение поля и задавать его (так называемые методы доступа). Свойства можно изменять в процессе разработки приложения с помощью инспектора объектов.   

Существует 3 основных принципа объектно-ориентированного программирования — инкапсуляция, наследование и полиморфизм.

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

Объект – это совокупность свойств и методов, а так же событий на которые он может реагировать.

Инкапсуляция – объединение в единое целое данных и алгоритмов обработки этих данных. Данные – поля объекта, а алгоритмы – объектные методы.

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

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

TNewObject = class(TOldObject);

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

Унаследованные от класса-предка поля и методы доступны в дочернем классе; если имеет место совпадение имен методов, то говорят, что они перекрываются.

Поведение методов при наследовании, без преувеличения, является краеугольным камнем объектно- ориентированного программирования. В зависимости от того, какие действия происходят при вызове, методы делятся на три группы. В первую группу отнесем статические методы, во вторую — виртуальные (virtual) и динамические (dynamic) и, наконец, в третью — появившиеся только в Delphi 4 — перегружаемые (overload) методы.

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

Полиморфизм – это свойство родственных объектов (то есть объектов, имеющих одного общего родителя) решать схожие по смыслу проблемы разными способами. В рамках Object Pascal поведенческие свойства класса определяются набором входящих в него методов. Изменяя алгоритм того или иного метода в потомках класса, программист может придавать этим потомкам отсутствующие у родителя специфические свойства. Для изменения метода необходимо перекрыть его в потомке, т. е. объявить в потомке одноименный метод и реализовать в нем нужные действия. В результате в объекте-родителе и объекте-потомке будут действовать два одноименных метода, имеющих разную алгоритмическую основу и, следовательно, придающих объектам разные свойства. Это и называется полиморфизмом объектов.

1.3.1 Понятие класса, объекта. Поля, методы, свойства объектов

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

Синтаксис объявления класса следующий:

Туре

<имя класса> = Class (<имя класса — родителя>}

 public                         // доступно всем

<поля,   методы,   свойства,   события>

published ,            // видны в Инспекторе  Объекта  и изменяемы

<поля,   свойства>

protected              // доступ только потомкам

<поля,   методы,   свойства,   события>

private                  // доступ  только в модуле

<поля,   методы,   свойства,   события>

end;

Имя класса может быть любым допустимым идентификатором. Но принято идентификаторы большинства классов начинать с символа «Т». Имя класса — родителя может не указываться. Тогда предполагается, что данный класс является непосредственным наследником TObject — наиболее общего из предопределенных классов. Таким образом, эквивалентны следующие объявления:

type   TMyClass   =   class

end;

И

type  TMyClass   =  class(TObject)

end;

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

Раздел public (открытый) предназначен для объявлений, которые доступны для внешнего использования. Это открытый интерфейс класса. Раздел published (публикуемый) содержит открытые свойства, которые появляются в процессе проектирования на странице свойств Инспектора Объектов и которые, следовательно, пользователь может устанавливать в процессе проектирования. Раздел private (закрытый), содержит объявления полей, процедур и функций, используемых только внутри данного класса. Раздел protected (защищенный) содержит объявления, доступные только для потомков объявляемого класса. Как и в случае закрытых элементов, можно скрыть детали реализации защищенных элементов от конечного пользователя. Однако, в отличие от закрытых, защищенные элементы остаются доступны для программистов, которые захотят производить от этого класса производные объекты, причем не требуется, чтобы производные объекты объявлялись в этом же модуле.

Объявления полей выглядят так же, как объявления переменных или объявления полей в записях:

<имя   поля>:   <тип>;

Объявления методов в простейшем случае также не отличаются от обычных объявлений процедур и функций.

Поля данных, исходя из принципа инкапсуляции , всегда должны быть защищены от несанкционированного доступа. Доступ к ним, как правило, должен осуществляться только через свойства, включающие методы чтения и записи полей. Поэтому поля целесообразно объявлять в разделе private — закрытом разделе класса. В редких случаях их можно помещать в protected — защищенном разделе класса, чтобы возможные потомки данного класса имели к ним доступ. Традиционно идентификаторы полей совпадают с именами соответствующих свойств, но с добавлением в качестве префикса символа 'F'.

Свойство объявляется оператором вида:

property <имя свойства>;<тип>

read <имя поля или метода чтения>

write  <имя  поля или метода  записи>

<директивы запоминания>;

Если в разделах read или write этого объявления записано имя поля, значит предполагается прямое чтение или запись данных.

Если в разделе read записано имя метода чтения, то чтение будет осуществляться только функцией с этим именем. Функция чтения — это функция без параметра, возвращающее значение того типа, который объявлен для свойства. Имя функции чтения принято начинать с префикса Get, после которого следует имя свойства.

Если в разделе write записано имя метода записи, то запись будет осуществляться только процедурой с этим именем. Процедура записи — это процедура с одним параметром того типа, который объявлен для свойства. Имя процедуры записи принято начинать с префикса Set, после которого следует имя свойства.

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

Директивы запоминания определяют, как надо сохранять значения свойств при сохранении пользователем файла формы .dfm.

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

Имеется четыре вида методов: статические, виртуальные, динамические и абстрактные.

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

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

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

Объявляется абстрактный метод с помощью ключевого слова abstract после слова virtual или dynamic.

Например:

procedure   DoSomething;   virtual;   abstract;

Любой метод (и статический, и виртуальный) может быть перегружен с помощью ключевого слова overload. Для виртуальных методов в этих случаях надо еще добавить ключевое слово reintroduce. Если перегруженные таким образом методы различаются числом или типом параметров (так называемой сигнатурой), то при вызове метода из класса — наследника будет вызываться тот метод, список параметров которого соответствует списку аргументов.

При реализации метода, переопределенного любым способом в классе — наследнике, можно вызывать метод класса — родителя. Для этого перед именем метода при его вызове записывается ключевое слово inherited. Например, оператор

inherited create (...);

вызывает метод Create родителя.

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

inherited; то будет вызван конструктор родительского класса.


 

А также другие работы, которые могут Вас заинтересовать

41996. Дослідження файлової системи NTFS 625 KB
  Теоретичні відомості Файловая система NTFS New Technology File System формирует на логических дисках следующую структуру: MFT Mster File Tble – метафайл содержащий информацию о информационных файлах и их местонахождении на логическом диске. MFTMirror – копия файла MFT содержащая информацию только о служебных метафайлах которая чаще всего располагается в середине логического диска. Помимо программы загрузчика IPL2 в BootSector размещаются поля со следующей информацией: Смещение байт Описание 0 Команда JMP xxxx 3...
41997. Исследование объемов передаваемой информации в каналах спутниковых систем связи 41.5 KB
  Лабораторная работа состоит из 2 этапов расчета: Расчет энергетических характеристик спутниковой линии.2 содержат графическое отображение результатов расчета. В конце работы предложены результаты расчета производительности системы при заданном наборе исходных данных. Исследовать характеристики ССС по всем пунктам этапа расчета 1 при заданном наборе исходных данных.
42001. ФІЗИКА. ЛАБОРАТОРНИЙ ПРАКТИКУМ 6.1 MB
  Для цього до посібника введено окрему главу “На допомогу студенту†в якій розглянуто на конкретних прикладах всі етапи виконання лабораторної роботи. Лабораторні роботи з основного курсу фізики [2. Вивчення роботи релаксаційного генератора [2. ВИЗНАЧЕННЯ РОБОТИ ВИХОДУ ЕЛЕКТРОНА З МЕТАЛІВ МЕТОДОМ ГАЛЬМУВАННЯ ФОТОЕЛЕКТРОНІВ В ЕЛЕКТРИЧНОМУ ПОЛІ [2.
42002. ТЕОРІЯ БІОСТРУКТУР 929.5 KB
  Локальні наближення для обмінної потенціальної енергії. Мета: Ознайомлення та засвоєння чисельних методів по розрахунку хвильових функцій та власних значень енергії електронів в ізольованому атомі.2 – оператор кінетичної енергії електронів – радіусвектор іго електрона m – маса електрона – постійна Планка; 1.
42004. Информационное обеспечение систем управления 882 KB
  Пример ERмодели [7] Лабораторная работа №3Создание простых запросов и запросов на изменение [7.1] Задание к лабораторной работе [8] Лабораторная работа № 4Создание сложных запросов.1] Цель работы: создание итоговых параметрических перекрестных запросов и запросов на объединение; создание и настройка отчетов по запросам на основе учебной БД Библиотека. Запрос – это объект БД который служит для извлечения данных из таблиц и предоставления их пользователю в удобном виде.