Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Lektsii_po_OOP док.doc
Скачиваний:
10
Добавлен:
28.03.2015
Размер:
313.34 Кб
Скачать

Классический алгоритм

1)анализ

2) проектирование

3) программирование

4) тестирование

5) внедрение

Это водопадная модель.

-непригодность для создания сложных систем, состоящих из большого числа модулей

-высокие затраты на организацию внесения изменений.

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

-результаты доступны только в конце проекта

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

1) Анализ.

Цель – полное последовательное доступное для понимания описание задачи. Разрабатывается структурная схема: основные объекты и сообщения между ними.

Результат анализа – полная (на данный момент времени) модель задачи, к решению которой приступают к этапу проектирования.

2)Проектирование.

Различают логическое и физическое.

Логическое – принятие концептуальных решений независимых от аппаратной и программной базы, выделение основных классов, их свойств и методов. При этом используются специальные методы: полиморфизм, перегрузка и т.д и инструментальные средства проектирование (caseсредства,ComputerAidedSoftwareEngineering).

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

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

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

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

Новые концепции ООП в Object Pascal

В языке ObjectPascal, использующимся вDelphi, произошли следующие изменения в объектной модели, по сравнению с последней версиейBorlandPascal.

1. Изменение в синтаксисе объявления и использования объектов.

2. Введение указателей на методы.(function ………… of Object).

3. Введение методов классов. (class function ……….).

4. Введение ссылок на классы.

5.Изменение в организации определений и вызовов методов.

6. Введение раздела объявления интерфейса разработчика объектного типа (protected).

7.Введение раздела объявления интерфейса времени проектирования (published).

8.Введение механизмов RTTI(информация о типах времени выполнения).

9.Введение поддержки процедурных полей.

10. Введение понятия свойств (property).

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

Класс имеет некоторые внутренние данные и некоторые наборы методов. Методы класса реализуются в форме процедур или функций. Данные и методы класса описывают универсальные характеристики и поведение некоторого набора похожих объектов.

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

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

Пример:

Старая модель

Type

PmyObject=^TMyObject

TMyobject=object(Tobject)

Myfield:TMyType

Constructor Init;

End;

……………………………

Var MyObject:PMyObject;

Begin

MyObject:=New(PMyObject,Init );

MyObject^.MyField:=’123123123’;

……………………………………..

…………………………………….

Новая модель

Type TMyObject=class(Tobject)

myField:TMyType;

constructor Create;

end;

var MyObject:TMyObject;

begin

MyObject:=TMyObject.Create;

MyObject.MyField:=…………..;

………………………………..

………………………………

Методы объектов

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

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

  • virtual (виртуальные) — такие методы могут быть переопределены в потомках объекта. Например, если у вас есть объект гараж и метод ворота, то в его потомке этот метод может быть заменен улучшенной версией. Для определения адреса Delphi строит таблицу виртуальных методов, которая позволяет во время выполнения программы определить адрес метода. В такой таблице хранятся все методы текущего объекта и его предка.

  • dynamic (динамические) — эти методы схожи с виртуальными, но для определения адреса используется другой способ. Для каждого объекта строится таблица только из его методов. Каждому методу назначается уникальный индекс. В данном случае экономится память, потому что не надо хранить адреса методов предков, но для поиска любого из них тратится намного больше времени.

  • message (сообщения) — такие методы реагируют на события операционной системы. Для большинства сообщений ОС Windows в Delphi уже есть специальные обработчики событий, но если вам нужно, чтобы метод реагировал на определенное событие, которого нет у компонента, необходимо определить его вручную.

  • abstract (абстрактный) — такой метод будет только объявлен в объекте, а реализации у него не будет. Если в объекте есть хотя бы один такой метод, то он считается абстрактным. Такой объект нельзя использовать.    Реализацию метода должны сделать потомки, и именно с потомками можно работать. Таким образом, вы можете в каком-либо объекте зарезервировать имя метода для потомков, чтобы они реализовали в нем какое-то действие.

   Если вы объявили метод как virtual или dynamic, то можно переопределить их действия в наследниках.

Type TDate=class

Math, Day, Year:integer;

Procedure SetValue(m,d,y:integer);

Function heapYear:Boolean;

End;

Procedure TDate.SetValue (m,d,y:integer);

Begin

Mont:=m; day:=d; Year:=y;

End;

*конструктор унаследован от TObject

Function TDate.heapYear:Boolean;

Begin

Result:=IsHeapYear(Year); {---------sysUtils.pas}

End;

Использование классов:

Var Aday: Tdate;

begin

Aday:=Tdate.Create;

ADay.SetValue(9, 10, 2011);

If Aday.heapYear then ShowMessage(‘висакосный год: ’+IntToStr(Aday.Year);

Aday.Free;

…………………

SELF

Методы очень похожие с процедурами или функциями.

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

Self.Month:=m;

Self.year:=y;

Метод отличается тем что у него есть адрес экземпляра объекта.

Создание компонентов динамически

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

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

Procedure TForm1.FormMouseDown ( );

Var Btn:TButton;

Begin

Btn:=Tbutton.Create(Self);

Btn.Parent:=Self;

Btn.left:=x; Btn.Top:=y;

Btn.Width:=Btn.Width+50;

Btn.Caption:=format(‘Button at %d, %d,’,[x,y]);

……………………..

……….при указании конкретного значения ….. кнопки будут появл только на форме с именем Форм1 даже если мы будем щелкать по другим формам.

Зад. Написать приложение почти такое же как этот пример только на форму поместить 1 кнопочку назвать ее, создать форму, при щелчке по этой кнопке должны создавать формы этого же класса Tform1 (их положение можно смещать относительно друг друга). При щелчке на любой из форм должны появляться динамически создаваемые кнопочки + указание их координат.

Перегрузка методов в обжект паскале. Допускается существование нескольких методов с одинаковым именем при условии что параметры у них различные. Анализируя набор аргументов компилятор определяет какую именно версию процедуры необходимо вызвать.

Правила.

1.Каждая версия метода должна сопровождаться директивой overload;

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

3. Тип возвращаемого значения нельзя использовать в качестве отличительного признака версий.

Пример.

Type TDate=class

Fdate:TdateTime;

Public

Procedure SelValue(m,d,y:integer); overload;

Procedure SetValue(newDate:TDateTime); overload;

…………….

End;

Procedure TDate.SetValue(m,d,y:integer);

Begin

Fdate:=EncodeDate(y,m,d);

End;

Тут вы можете оставить комментарий к выбранному абзацу или сообщить об ошибке.

Оставленные комментарии видны всем.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]