Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

Принципы объектно-ориентированного программирования




Кафедра КТиС

 

   

   

   

   

   

   

    ПОЯСНИТЕЛЬНАЯ ЗАПИСКА

к курсовой работе

По дисциплине: Языки программирования и методы трансляции

на тему: Разработка классов предметной области «Кошки»

 


Введение

 

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

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

Специалистам - программистам удалось выделить и разработать большой набор абстрактных объектов, которые используются при создании программ. Эти объекты в Delphi называются компонентами и представлены в палитре компонент. Эти объекты можно использовать в различных проектах и сколько угодно раз, без затраты времени на их программирование. Примером компонентов являются Label, Edit. и так далее.

 


Принципы объектно-ориентированного программирования

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

Объект - совокупность свойств, методов, событий. Что означает "совокупность"? Это значит, что объект как бы состоит из методов, свойств и событий, и они обеспечивают его полноценную работу. Представим себе кнопку. Она обладает:

свойствами (цвет, текст на кнопке, шрифт текста и так далее);

событиями (события пользовательского ввода, например, нажатие на кнопку);

методами (обеспечивающими работу кнопки, например, метод прорисовки текста, прорисовки фокуса и так далее).

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

Свойства - это переменные, которые влияют на состояние объекта. Например, ширина, высота.

Методы - это те же процедуры и функции, то есть это то, что объект умеет делать (вычислять). Например, объект может иметь процедуру для вывода какого-то текста на экран. Эта процедура и есть метод, который принадлежит объекту.

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

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

Рассмотрим пример. Пусть пользователь нажал на кнопку. В этом случае она, как объект, генерирует соответствующее событие. В результате этого может быть вызвана процедура-обработчик, которую вы назначили кнопке при возникновении данного события. В этом случае не требуется никакая дополнительная информация, поэтому объект не будет пересылать никаких параметров, кроме указателя на самого себя. Однако, если нужно обработать событие, связанное с перемещением курсора мыши, дело будет обстоять несколько иначе. В этом случае объект будет генерировать событие и автоматически передавать новые координаты X и Y курсора, поэтому процедура должна быть объявлена с соответствующими параметрами, чтобы можно было принять их от объекта.

События - наиболее сложная часть объектов, но на практике работа с ними намного проще.

Теперь рассмотрим работу свойств, методов и событий как единого целого.

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

Свойства:

• левая позиция (X);

• верхняя позиция (Y);

• ширина;

• высота;

• заголовок;

• методы:

• создать кнопку;

• уничтожить кнопку;

• нарисовать кнопку;

• события:

• кнопка нажата;

• заголовок кнопки изменен.

Объект работает как единое целое. Например, изменили заголовок кнопки. Объект генерирует событие "заголовок кнопки изменен". По этому событию вызывается метод "нарисовать кнопку". Этот метод рисует кнопку в позиции, указанной в свойствах объекта, и выводит на кнопке новый текст, указанный в свойстве "заголовок".

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

Класс в Delphi это структурированный тип данных (как array, record), конкретный экземпляр класса (переменная типа класс) называется объектом. Объекты относятся к динамическим структурам данных т.е. они обязательно должны создаваться (удаляться) на этапе выполнения проекта.

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

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

Класс представляет собой единство трех сущностей - полей, методов и свойств. Объединение этих сущностей в единое целое и называется инкапсуляцией. Инкапсуляция позволяет во многом изолировать класс от остальных частей программы, сделать его “самодостаточным” для решения конкретной задачи. В результате класс всегда несет в себе некоторую функциональность. Например, класс TForm содержит (инкапсулирует в себе) все необходимое для создания Windows-окна, класс TMemo представляет собой полнофункциональный текстовый редактор и так далее.

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

Область видимости членов класса определяется следующими ключевыми словами:

· Public - члены класса находящиеся в данном разделе доступны из любой точки программы

· Private - этот раздел накладывает самые жесткие требования на видимость. Члены класса в данном разделе доступны только в текущем модуле. Как правило, в данную секцию помещают поля.

· Protected - в отличие от Private члены из этого класса доступны в классах наследниках описанных в других модулях

· Published - в этом разделе располагаются свойства класса, доступные из Инспектора Объектов, что позволяет их менять на этапе проектирования. Область видимости совпадает с Public.

По умолчанию считается, что все поля расположены в разделе Private.

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

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

Класс потомок (дочерний класс) наследует все свойства и методы родительского класса и дополняется рядом собственных свойств и методов. Такая возможность порождения нового класса на основе другого класса называется наследованием и представляет один из принципов ООП. При создании класса необходимо выбрать нужный родительский класс и дополнить (детализировать) его.

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

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

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

Принцип наследования приводит к созданию ветвящегося дерева классов, постепенно разрастающегося при перемещении от TObject к его потомкам. Каждый потомок дополняет возможности своего родителя новыми свойствами и передает их своим потомкам.

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

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

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

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

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

Для статических методов перекрытие осуществляется компилятором. Например, метод ViewSex класса TPerson 1 статически перекрывается одноименным методом класса TPerson 2. По умолчанию все методы, описанные в классе, являются статическими.

Динамические и виртуальные методы отличаются от статических тем, что замещение родительских методов методами потомков происходит на этапе выполнения программы. Для объявления виртуального метода в родительском классе необходимо использовать зарезервированное слово virtual, а для объявления динамического метода - зарезервированное слово dynamic. В классе-потомке в заголовке замещающего метода должно быть указано зарезервированное слово override.

Так из описания классов TPerson 2 и TPerson 3 следует что, метод ViewSex класса TPerson 2 является виртуальным и перекрывается одноименным методом класса TPerson 3.

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

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

Основное предназначение абстрактных методов - быть родоначальником иерархии конкретных методов в классах-потомках.

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

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

Все методы являются методами класса, а не объекта, поэтому при описании метода в названии используется имя класса (например, TPerson1.ViewSex).

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

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

Компонент в Delphi представляют класс, а компонент установленный на форму уже конкретный объект. При работе с классами - компонентами, система автоматически создает (при установке компонента на форму) и удаляет (при удалении компонента) объекты.

 

Поделиться:





Воспользуйтесь поиском по сайту:



©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...