StringOfChar(Ch, Count) - заполнить строку символами



 Функция возвращает строку типа string, заполненную Count (типа Integer) символами Сh (типа Char).

Trim(S) - удалить начальные и заключительные пробелы

Функция формирует из строки S новую строку с удаленными начальными и заключительными пробелами и управляющими символами (с кодами до 31 включительно) и возвращает ее как результат своей работы. Сама строка S при этом не изменяется.

TrimLeft(S) - удалить начальные пробелы

Функция аналогична функции Trim, только удаляются лишь начальные пробелы и управляющие символы.

TrimRight(S) - удалить заключительные пробелы

Функция аналогична функции Trim, только удаляются лишь заключительные пробелы и управляющие символы.

UpCase(Ch) - преобразовать символ в прописной

Функция преобразовывает символ Ch в прописной и возвращает его как результат своей работы. Функция преобразовывает только строчные буквы латинского алфавита, остальные символы возвращаются функцией без изменения.

UpperCase(S) - получить строку с прописными буквами

Функция формирует строку, аналогичную строке S, но у которой все строчные буквы заменены прописными. Эта строка и возвращается функцией в качестве результата ее работы. Функция преобразовывает в прописные только буквы латинского алфавита.

 

Лабораторная работа № 2

 

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

Программ в среде DELPHI

 

Введение

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

Любая программа в широком смысле может рассматриваться как модель[8](воспроизведение или отражение) части реального мира (внешней среды, предметной области).

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

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

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

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

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

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

q использование более естественных с точки зрения повседневной практики понятий и простота введения новых понятий;

q возможность создания и использования библиотек классов (примером такой библиотеки является, в частности, библиотека компонент DELPHI):

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

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

 

 

Основные понятия ООП

Классы

В основе ООП лежат понятия класса и его физической реализации – объекта.

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

Данные класса называются полями, подпрограммы – методами, а характеристики данных и подпрограмм – свойствами.

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

Класс объявляется на основе общего правила задания типов. Описание структуры класса в языке Оbjеct Pascal начинается с зарезервированного слова class, после которого в круглых скобках указывается имя родительского класса. Если он не указан, то предполагается, что родительским является класс TОbjеct, который в ООП-модели языка Object Pascal по умолчанию считается предком всех объявленных классов. Далее в виде отдельных строк записываются поля данных, методы и свойства. Завершается описание класса зарезервированным словом end. Если ни одного поля, метода или свойства у объявляемого класса нет, но указан непосредственный предок класса, зарезервированное слово end в конце объявления можно не писать. Последовательность записи отдельных элементов (поля, методы, свойства) класса безразлична (с учетом возможности использования одними элементами других), однако чаще всего сначала записываются поля, затем методы и, наконец, свойства.

Пример описания простого класса [9]:

TTPerson=class

Private

  fname:string[15];

  faddress:string[35];

Public

  procedure show;

end;

В приведенном примере TTPerson – это имя класса, fname и faddress – имена полей, show – имя метода.

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

В ряде случаев может оказаться, что два класса используют характеристики друг друга. В этом случае приходится использовать опережающее объявление одного из этих классов, аналогично тому, как это делается для подпрограмм с использованием директивы forward. При опережающем объявлении сначала записывается лишь имя класса и через знак равенства - зарезервированное слово class, например:

TObject = class;

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

Отдельные элементы класса могут иметь различные возможности по их использованию вне рассматриваемого класса (иметь разные области доступности или, иначе, видимости). В ООП DELPHI имеется несколько вариантов задания областей видимости, которые определяют разделы (секции) в описании класса и начинаются с ключевых слов private, public, protected, published и automated. Количество и порядок следования этих разделов могут быть произвольными. Семантика разделов видимости рассматривается в п. 2.6.

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

Type

ИмяКласса = class(ИмяРодительскогоКласса)

         Опубликованные поля, методы, свойства;

Private

         Скрытые поля, методы, свойства;

Public

         Общедоступные поля, методы, свойства;

Protected

          Защищенные поля, методы, свойства;

Published

           Опубликованные поля, методы, свойства;

Automated

            Поля, методы, свойства для OLE-объектов;

end;

 

 

Объекты

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

Var

student:TTPerson;

professor:TTPerson;

Примечание. В дальнейшем все основные понятия ООП рассматриваются на примере решения задачи составления списков преподавателей и студентов некоторой кафедры вуза. Здесь и далее приводятся фрагменты программы решения этой задачи.

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

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

TTPerson = class

Private

fname:string[15];

faddress: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 описанного выше класса ТТРегson.

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

procedure ТТРегson.show;

Begin

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

end;

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

Обычно методы применяются к ранее созданным объектам программы. Такие методы можно считать методами объектов. В DELPHI существует возможность создания методов, которые можно использовать даже тогда, когда ни один объект класса не создан. К таким методам относятся, например, конструкторы, которые вызываются для создания объектов. Подобные методы называются методами класса и особым образом оформляются (за исключением конструкторов, о которых сказано выше). Объявление такого метода начинается с зарезервированного слова class, после которого следует обычное объявление метода, например:

TMyForm = class(TForm)

class procedure MessageCreate;

end;

class procedure TMyForm.MessageCreate;

Begin

end;

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


Дата добавления: 2018-04-15; просмотров: 391; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!