77991

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

Лекция

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

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

Русский

2015-02-05

48 KB

15 чел.

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

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

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

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

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

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

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

Объекты – это тоже хранилища разных типов данных. Данные объекты называются полями (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; то будет вызван конструктор родительского класса.


 

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

57417. Обобщение по теме «Синтаксис» 583.5 KB
  ЦЕЛЬ: Обучающая: обучение умению работать с текстом; нахождение подлежащего и сказуемого, определение его вида; определение вида словосочетания и его синтаксической связи; подготовка к написанию сочинения.
57419. Таблица умножения и деления. Закрепление 59.5 KB
  Цель урока: Знать табличные случаи умножения и деления; уметь применять их на практике; уметь решать текстовые и геометрические задачи.
57422. МУЗЫКА В КИНОФИЛЬМАХ 1.41 MB
  Цель: показать роль музыки в кинофильмах: музыка помимо наших желаний вызывает эмоциональный отклик, дать понятие «тапер»; показать что литература и музыка не иллюстрируют одна другую, а по разному изображают мир, дополняя, обогащая и усиливая наши переживания...
57423. Женщина – хозяйка мира 54.92 KB
  Цели: дать представление о жизни русской женщины в старинной деревенской семье; развивать чувство прекрасного; воспитывать чувство патриотизма уважения к матери Оборудование: мультимедиапроектор, компьютер, рецепты блюд русской кухни...
57424. Строим мосты, не стены. Урок обществознания 135.5 KB
  Цель урока: на основе документального кино, видео и текстовой информации расширить знания учащихся о правах детей, а также способах защиты прав в случаях их нарушения; сформировать критическое отношение обучаемых к толерантности в национальном аспекте на примере Палестины в сравнении с Россией...