Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АрхитектураБиологияГеографияДругоеИностранные языки
ИнформатикаИсторияКультураЛитератураМатематика
МедицинаМеханикаОбразованиеОхрана трудаПедагогика
ПолитикаПравоПрограммированиеПсихологияРелигия
СоциологияСпортСтроительствоФизикаФилософия
ФинансыХимияЭкологияЭкономикаЭлектроника

Объектно-ориентированное программирование – общая характеристика и сравнительный анализ. Объект и класс. Базовые принципы ООП – инкапсуляция, полиморфизм и наследование.



Читайте также:
  1. CASE-средства. Общая характеристика и классификация
  2. I. Наименование объекта культурного наследия
  3. I. ОБЩАЯ ИНФОРМАЦИЯ
  4. I. ОБЩАЯ ИНФОРМАЦИЯ
  5. I. Общая концепция выведения на рынок сотовой связи нового оператора
  6. I. Общая характеристика неосознаваемых побуждений личности.
  7. I. ХАРАКТЕРИСТИКА ЭМОЦИЙ УМСТВЕННО ОТСТАЛОГО РЕБЕНКА

Программирование объектов в структурном программировании очень запутанная задача. Это привело к появлению нового стиля программирования – объектно-ориентированное. Это произошло в конце 80-х годов, когда в Паскале появилось понятие «объекты», а в Си – «класс». Начиная с 5 версии Паскаля, появляются объекты и библиотека. Это была попытка создать для Паскаля визуальную среду программирования – Turbo Vision. В Си доминировал Си + +.

Появление объектно-ориентированной парадигмы программирования неразрывно связано с созданием систем визуального программирования. Это связано с двумя процессами:

1) появлением графического интерфейса в ОС;

2) в этом интерфейсе появились пиктограммы – визуальные объекты, связанными с какими-то действиями.

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

Первоначально название типа и его значения в Паскале было одинаковым – object, что создавало путаницу при использовании и описании. Это дало основание для заимствования из языка Си понятия класс (class) для названия типа объектов. Поэтому в Object Pascal уже определена специальная пользовательская структура данных – класс.

Основная цель ООП повышение эффективности разработки программ. В традиционных методах программирования изменение данных или правил и методов их обработки часто приводило к необходимости значительного изменения программы, что приводило к увеличению вероятности ошибок и возрастает время, необходимое для отладки программы. Использование ООП позволяет выйти из такой ситуации с min потерями, сведя необходимую модификацию программы к её расширению и дополнению.

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

<Имя потомка> =

object<имя предка>

поле;

поле;

метод;

метод;

end;

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

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

Класс является как бы шаблоном, на основе которого создаются экземпляры класса или объекты.

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

1) Инкапсуляции – объединение записей с процедурами и функциями, работающими с этими записями. Работа с данными и детали её реализации скрыты от внешнего пользователя объекта. Преимущества инкапсуляции заключается в модульности и изоляции кода объекта от другого кода программы.

Инкапсуляция –это скрытие полей внутри класса и оьъединение в классе информационных полей и процедур их обработки: методов и свойств.

По принципу инкапсуляции для обращения к информационным полям объета нужно либо использовать метод, либо сделать это поле свойством. Произвольный доступ к информационным полям как бы запрещён.

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

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

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

Виртуальные объекты - это объекты, которые имеют несколько вариантов и в различной ситуации действуют разные варианты. Виртуальными делают свойства и методы, есть просто в виртуальные, а есть динамические.

Инкапсуляция имеет следующие достоинства:

1) объект класса, у которого есть методы, обладает особыми свойствами, которыми недоступны другим типам данных. Особенно удобны методы для описания действий самого объекта. Например, объект кошка может догонять, убегать, подпрыгивать и т.д. и все это можно сделать в виде методов.

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

Возможность инкапсуляции появилась вместе с формированием процедурного типа данных, где элементом является процедура или функция определенного вида.

3) преимущества инкапсуляции заключается в модульности и изоляции кода объекта от другого кода программы.

2) Наследование – задание объекта, затем использование его для построения иерархии порожденных объектов с наследованием доступа каждого из порожденных объектов к коду и данным предка.

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

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

Построение такой иерархии-это нововведение.

При изучении различных объектов возникает проблема их описания в виде класса. В этой проблеме есть следующие характеристики:

1) часто объект достаточно сложен, что мешает спроектировать его свойства;

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

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

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

Преимущество наследования заключается в совместном использовании многими объектами общего кода.

3) Полиморфизм – задание одного имени действию, которое передается вверх и вниз по иерархии объектов, с реализацией этого действия способом, соответствующим каждому объекту в иерархии. Означает «много форм». Это свойство объектов переопределять методы наследуемого класса. Это значит, что вызов метода объекта для переменной приведёт к выполнению кода, конкретного экземпляра класса, соответствующего данной переменной. Работает, главным образом, через указатели.

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

Понятие класса в языке ObjectPascal. Структура класса: поля, методы, свойства. Доступ к структурным элементам класса. Иерархия наследования классов. Конструктор и деструктор класса.

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

<Имя потомка> =

object<имя предка>

поле;

поле;

метод;

метод;

end;

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

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

Структура класса гораздо сложнее записи, поэтому внутри класса выделены специальные области:

Type

Имя класса = class (имя предка)

Published {Специальная область элементов, доступных для инспектора объектов}

…..

Private {Область закрытых элементов, доступных только внутри методов данного}

….. {класса и подпрограмм данного модуля, недоступны потомках}

Protected {Область закрытых элементов, доступных методам класса и его потомков}

…..

Public {Область элементов, доступных в любом модуле проекта}

…..

Automated {Секция автоматизации - элементы, необходимые для технологии OLE }

…..

end;

Каждый интерфейс обеспечивает следующие уровни доступа:

Private (закрытый). Объявленные переменные и методы доступны только для того кода, который находится в блоке реализации самого объекта. Директива Private скрывает особенности реализации объекта от пользователей и защищает члены этого объекта от доступа и изменения извне.

Protected (защищенный). Члены класса доступны объектам, производным от данного класса. Это позволяет скрыть внутреннее устройство объекта от пользователя и обеспечить необходимую гибкость, и эффективность доступа к полям и методам объекта для его потомков.

Public (скрытый). Члены объекта доступны в любом месте программы. Конструкторы и деструкторы всегда должны быть объявлены как public.

Published (экспортируемый). Для членов этого объекта в процессе компиляции будет создана информация о типах времени выполнения. Это позволит другим элементам приложения получать информацию об элементах объекта, объявленных как published.

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

О. Поле – элемент структуры, обозначающий хранение простых данных.

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

Поля имеют тип, обычно это стандартные типы (число, строка, знак, логический тип, массив). Но можно использовать и сложную структуру – например другой класс. Главная особенность поля – способ доступа к данным. Здесь разрешен прямой доступ к данным. Принцип инкапсуляции требует, чтобы к полям обращались только через свойства и методы, поэтому разумно размещать поля в областях Private и Protected. Класс потомок получает все поля всех своих предков и может дополнять их своими, но не может их переопределять (по сравнению например с методами) или удалять.

Замечание. Так же как и для полей записи обращение к полям возможно либо с помощью указания имени объекта, точки и имени поля (составное имя), либо с помощью структурного оператора with.

Методы представляют собой процедуры и функции, принадлежащие классу. Объявляются внутри описания объекта. Они определяют поведение класса.

procedure <Заголовок> (<Параметр1>, <Параметр2>: integer);

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

procedure <ТипОбъекта.Метод> (<Параметр1>, <Параметр2>: integer);

begin

end;

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

При описании класса методы описываются в 2 этапа:

Заголовок метода помещается в ту или иную область описания класса.

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

В классе всегда должны присутствовать 2 важнейших метода: конструктор и деструктор.

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

Конструктор – спец. метод, инициализирующий объект, содержащий виртуальные методы, он объявляется специально зарезервированным словом constructor. Он инициализирует объект путем установления связи между объектом и специальной таблицей виртуальных методов, содержащей адреса кодов, реализующих Вирт. методы. Может использоваться для инициализации полей данных объекта.

Деструктор – спец. метод, освобождающий память «кучи» (Вся динамическая память рассматривается как подобная стеку структура, называемая кучей) от динамических объектов. Использует слово destructor.

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

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

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

О. Свойства – поле процедурного типа. Свойства должны регулировать доступ к полям. Для этого у каждого свойства есть поле и 2 метода – чтения (read) и записи (write). Обычно свойство связано с полем и указывает те методы класса, которые обеспечивают чтение значения из поля и запись нового значения в поле. Формат записи заголовка свойства:

Property имя свойства: тип Read метод чтения из поля Write метод записи в поле Default значение по умолчанию;

При работе программы свойство используется как обычное поле, но фактически ввод и чтение данных возможно только через указанные процедуры-методы. Если нет необходимости в специальных методах, то можно указывать вместо процедуры (метода) имя поля. Если поле доступно только для чтения то не указывается метод записи и наоборот. Значение по умолчанию присваивается полю свойства, если оно не было определено (что удобно для инициализации объекта). Принято имя метода чтения начинать с Get, а метода записи с Set. Для того чтобы свойство было доступно инспектору объектов его необходимо поместить в область Pablished.

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

 


 

 


Дата добавления: 2015-07-11; просмотров: 205 | Нарушение авторских прав






mybiblioteka.su - 2015-2024 год. (0.017 сек.)