28804-1 (Программирование. Delphi)

2016-07-31СтудИзба

Описание файла

Документ из архива "Программирование. Delphi", который расположен в категории "". Всё это находится в предмете "информатика" из , которые можно найти в файловом архиве . Не смотря на прямую связь этого архива с , его также можно найти и в других разделах. Архив можно найти в разделе "рефераты, доклады и презентации", в предмете "информатика, программирование" в общих файлах.

Онлайн просмотр документа "28804-1"

Текст из документа "28804-1"

ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ

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

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

Замечание

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

Класс

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

Вот пример описания простого класса:

TTPerson=class

Private

fname: string [15] ;

f address: string [35] ;

public

procedure show;

end;

Данные класса называются полями, процедуры и функции - методами. В приведенном примере TTPerson - это имя класса, fname и faddress - имена полей, show - имя метода.

Замечание

Согласно принятому в Delphi соглашению имена полей должны начинаться с буквы f (от слова field - поле).

В программе описание класса помещают в раздел описания типов (type).

Объект

В программе представители класса - объекты, объявляются в разделе var. Например, так:

var

student: TTPerson;

professor: TTPerson;

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

Выделение памяти осуществляется при помощи специального метода класса - конструктора, которому обычно присваивают имя create (создать). Чтобы подчеркнуть особую роль и поведение конструктора, в описании класса вместо слова procedure используется слово constructor. Ниже приведено описание класса TTPerson, в состав которого введен конструктор.

TTPerson = class

private

fname: string [ 15] ;

f address: string [35] ;

constructor create; // конструктор

public

procedure show; // метод

end;

Выделение памяти для данных объекта происходит присваиванием значения результата применения метода-конструктора к типу (классу) объекта. Например, после выполнения инструкции

professor: =TTPerson.create ;

выделяется необходимая память для данных объекта professor .

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

constructor TTPerson.create ;

begin

fname: = ‘ ‘ ;

faddress:=’’' ;

end;

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

После объявления и инициализации объект можно использовать, например, установить значение поля объекта. Доступ к полю объекта осуществляется указанием имени объекта и имени поля, которые отделяются друг от друга точкой. Хотя объект является ссылкой, однако правило доступа к данным с помощью ссылки, согласно которому после имени переменной, являющейся ссылкой, надо ставить значок ^ на объекты не распространяется. Например, для доступа к полю fname объекта professor вместо

professor^. Fname

надо писать

professor.fname

Очевидно, что такой способ доступа к полям объекта более естественен.

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

professor.free;

Метод

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

professor.Show;

вызывает применение метода show к объекту professor. Фактически инструкция применения метода к объекту - это специфический способ записи инструкции вызова процедуры.

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

Ниже приведен пример определения метода show приведенного выше класса TTPerson.

// метод show класса TTPerson

procedure TTPerson. show;

begin

ShowMessage(‘Имя:'+fname+#13+'Адрес: '+faddress) ;

end;

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

Инкапсуляция и свойства объекта

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

В Object Pascal ограничение доступа к полям объекта реализуется при помощи свойств объекта. Свойство объекта характеризуется полем, хранящем значение свойства, и двумя методами, обеспечивающими доступ к полю свойства. Метод установки значения свойства называется методом записи свойства (write), метод получения значения свойства называется методом чтения свойства (read).

В описании класса перед именем свойства записывают слово property (свойство). После имени свойства указывается его тип, затем имена методов, обеспечивающих доступ к значению свойства. После слова read указывается имя метода, обеспечивающего чтение свойства, после слова write - записи свойства имя метода. Ниже приведен пример описания класса TTPerson, содержащего два свойства: Name и Address.

type

TName=string[15] ;

TAddress=string[35] ;

TTPerson = class

Private

FName:Tname; // значение св-ва Name

Faddress:TAdress; // значение св-ва Address

Constructor Create (Name :Tname) ;

Procedure Show;

Function GetName:TName;

Function GetAddress:TAddress;

Procedure SetAddress (NewAddress: TAddress ) ;

Public

Property Name: Tname

read GetName;

Property Address: Taddress

read GetAddress

write SetAddress;

end;

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

Student.Address:= 'С.Петербург, ул.Садовая 21, кв. 3';

Компилятор перетранслирует приведенную инструкцию присваивания значения свойству в инструкцию вызова метода

Student.SetAddress ( ' С. Петербург, ул. Садовая 21, кв .3'),•

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

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

Оформление данных объекта как свойства позволяет ограничить доступ к полям, хранящим значения свойств объекта, например можно разрешить только чтение. Чтобы инструкции программы не могли изменить значение свойства, в описании свойства надо указать только имя метода чтения. Попытка присвоить значение свойству, предназначенному только для чтения, вызывает ошибку времени компиляции. В приведенном выше описании класса TTperson свойство Name доступно только для чтения, а свойство Address - для чтения и записи.

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

//конструктор объекта TTPerson

Constructor TTPerson.Create (Name:TName) ;

begin

FName:Name ; end;

// метод получения значения свойства Name

Function TTPerson.GetName ;

begin

Result: =FName ;

end;

// метод получения значения свойства Address

Function TTPerson.GetAddress;

begin

Result: =FAddress;

end;

// метод изменения значения свойства Address

Procedure TTPerson.SetAddress (NewAddress: TAddress ) ;

Begin

if FAddress =' '

then FAddress: =NewAddress;

end;

Приведенный конструктор объекта TTPerson создает объект и устанавливает значение поля FName, определяющего значение свойства Name.

Инструкции программы, обеспечивающие создание объекта класса TTPerson и установку его свойства, могут быть, например, такими:

student: =TTPerson.create ( ' Иванов ' ) ;

student.address:='yл. Садовая, д.З, кв.25';

Наследование

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

В объявлении класса-потомка указывается класс родителя. Например, класс TEmployee (сотрудник) может быть порожден от рассмотренного выше класса ттрегзоп путем добавления поля Department (отдел). Объявление класса TEmployee в этом случае может выглядеть так:

TEmployee = class (TTPerson)

FDepartment: integer; // номер отдела

constructor Create (Name :TName;Dep: integer) ;

end;

Заключенное в скобки имя класса TTPerson показывает, что класс TEmployee является производным от класса TTPerson. В свою очередь, класс ттрегзоп является базовым для класса TEmployee.

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

constructor TEmployee.Create(Name:Tname;Dep:integer);

begin

inherited Create (Name);

FDepartment: =Dep;

end;

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

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

engineer: =TEmployee.create ( ' Сидоров ' , 413 ) ;

engineer.address:='yл.Блохина, д.8, кв.10';

Первая инструкция создает объект типа TEmployee. Вторая устанавливает значение свойства, которое относится к родительскому классу.

Директивы Protected и Private

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

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

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

Свежие статьи
Популярно сейчас
Зачем заказывать выполнение своего задания, если оно уже было выполнено много много раз? Его можно просто купить или даже скачать бесплатно на СтудИзбе. Найдите нужный учебный материал у нас!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
5173
Авторов
на СтудИзбе
436
Средний доход
с одного платного файла
Обучение Подробнее