Разработка Windows-приложения в среде Pascal ABC

Автор работы: Пользователь скрыл имя, 21 Июня 2014 в 22:28, курсовая работа

Описание работы

В данной работе требуется дополнить иерархию классов TPoint, TCircle новым классом и разработать Windows-приложение, осуществляющее управление объектом нового класса. Все объекты нового класса должны наследовать базовое поведение родительских классов: возможность перемещаться по экрану, изменять цвет оставляемого следа и размеры.
Условие задачи:
Объект представляет собой окружность с отмеченным диаметром. Начальное положение диаметра задается углом между ним и осью Ох. Дополнительные возможности управления объектом: поворот фигуры вокруг центра по часовой стрелке – клавиша «R», против часовой стрелки – клавиша «L».

Содержание работы

1.Введение………………………………………………………………3
2.Основная часть……………………………………………………......4
2.1 Понятия Объектно-ориентированного программирования…..4
2.2 Описание иерархии объектных типов…………………………11
3. Описание окна приложения на этапе его работы…………………13
4.Список литературы…………………………………………………...15
5.Приложения…………………………………………………………...16

Файлы: 1 файл

Копия Курсовая.doc

— 130.50 Кб (Скачать файл)

 

 

Содержание

 

 

 

1.Введение………………………………………………………………3

2.Основная часть……………………………………………………......4

     2.1 Понятия Объектно-ориентированного программирования…..4

     2.2 Описание иерархии объектных типов…………………………11

3. Описание  окна приложения на этапе его работы…………………13

4.Список литературы…………………………………………………...15

5.Приложения…………………………………………………………...16

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Введение

 

 

В данной курсовой работе предложено создать Windows-приложение в среде Pascal ABC, которое как планируется, будет обеспечивать решение специализированных задач по формированию, обработке на ЭВМ и выводу информации.

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

Условие задачи:

Объект представляет собой окружность с отмеченным диаметром. Начальное положение диаметра задается углом между ним и осью Ох. Дополнительные возможности управления объектом: поворот фигуры вокруг центра по часовой стрелке – клавиша «R», против часовой стрелки – клавиша «L».

 

Основная часть

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

 

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

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

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

Описание класса в Pascal ABC имеет вид:

type

  имя класса=class

          описания  полей

          объявления  или описания методов и описания  свойств

  end;

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

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

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

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

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

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

Конструктор представляет собой функцию, создающую объект в динамической памяти, инициализирующую его поля и возвращающую указатель на созданный объект. Этот указатель обычно сразу присваивается переменной типа класс. При описании конструктора вместо служебного слова function используется служебное слово constructor. Кроме того, для конструктора не указывается тип возвращаемого значения. Для вызова конструктора следует указать имя класса, за которым следует точка-разделитель, имя конструктора и список параметров. Заметим, что для всех конструкторов в Pascal ABC принято использовать имя Create.

Пример.

var A : TPoint;

begin

  A:=TPoint.Create(200, 150, clRed); // создается красная точка

end.

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

В Pascal ABC конструктор можно также вызвать как обычную процедуру, при этом создание объекта не происходит, а выполняется лишь тело конструктора.

Деструктор представляет собой процедуру, уничтожающую объект и освобождающую динамическую память, которую этот объект занимал. Если другие действия не нужны, то программист может даже не описывать деструктор явно – компилятор будет использовать стандартный деструктор. При описании деструктора вместо служебного слова procedure используется служебное слово destructor. Заметим, что для всех деструкторов в Pascal ABC принято использовать имя Destroy. Деструктор объекта вызывается как обычный метод, например: A.Destroy;. После вызова деструктора пользоваться объектом (т.е. обращаться к его полям и вызывать его методы) нельзя. Чтобы это подчеркнуть, полезно сразу после вызова деструктора присвоить переменной, представляющей объект, значение nil: A :=nil;

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

const n=6;

var P : Tpoint;

     A : array [1..n] of TPoint;

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

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

имя_переменной.имя_метода(список параметров)

При разработке приложений для пользователя необходимо учитывать, что программа должна управляться действиями пользователя (событиями): перемещением мышки, нажатием клавиши на клавиатуре и т.п. Обычно в классе пишут так называемые «обработчики событий», то есть процедуры, которые в ответ на событие выполняют определенную работу. Напишем и мы метод HandleEvent, который задает реакцию «точки» при нажатии клавиш на клавиатуре. Пусть клавиши управления курсором (стрелки вверх, вниз, влево, вправо) перемещают точку в нужном направлении на 10 пикселей, а нажатие клавиш 0–7 изменяет цвет точки.

Идентификаторы Up, Down, Left, Right – это именованные константы, представляющие собой коды клавиш управления курсором. Для их получения напишем вспомогательную функцию

Заметим, что для «обычной» клавиши функция ReadKey возвращает соответствующий ей символ. Код этого символа находится в пределах от 0 до 255. Для стрелок управления курсором, функциональных клавиш и в некоторых других случаях функция  возвращает два символа, первый из которых нулевой, а код второго также находится в пределах от 0 до 255. Чтобы избежать путаницы, к коду второго символа прибавляется 256 и сумма возвращается в качестве результата.

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

type MyClass=class(BaseClass)

...

end;

класс MyClass наследуется от класса BaseClass.

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

Использование принципа наследования существенно уменьшает количество кода, который программист должен написать при объявлении нового класса. Разработаем, например, производный от TPoint класс TCircle (окружность). Заметим, что окружность отличается от точки наличием еще одного параметра – радиуса. Только его и нужно добавить при описании класса:

Замечание. Среди методов класса TCircle отсутствует метод Move, поэтому при нажатии клавиш управления курсором он (метод) будет вызываться из базового класса TPoint, но перемещаться будет не точка, а окружность! Далее мы разберемся, почему это происходит.

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

 

Полиморфизм. Полиморфизм (англ.: много форм) используется в ситуации, когда для группы взаимосвязанных объектов требуется выполнить единое действие, но каждый из этих объектов должен выполнить указанное действие по-своему (т.е. у одного действия возникает много форм). Для этого определяется базовый для всех объектов класс с методом, предусмотренным для выполнения указанного действия, после чего этот метод переопределяется во всех потомках. Примером может служить иерархия классов Tpoint – Tcircle, в каждом из которых определены методы Show и Hide, предназначенные для отображения объекта на экране.

Возникает вопрос: как Pascal ABC понимает, какой метод Show (базового или производного класса) следует вызывать в конкретной ситуации? При «прямом» вызове метода Show (то есть через имя объекта) проблем не возникает: тип объекта известен уже при компиляции программы. Но при вызове метода Show через метод Move возникает следующая проблема: метод Move является общим для нескольких классов, поэтому до его вызова неизвестно, какой объект его (метод) вызывает.

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

В языке Pascal ABC все методы (за исключением конструкторов) являются виртуальными. В итоге, если метод Move вызывается объектом класса TPoint, то сам Move вызовет методы Show и Hide для рисования точки. Если же метод Move будет вызван объектом класса Tcircle, то Move вызовет методы Show и Hide для рисования окружности, что нам и нужно!

Если бы методы Show и Hide не были виртуальными, то в класс TCircle нам пришлось бы добавить методы Move и ChangeColor, «дословно» совпадающие с одноименными методами базового класса. Следовательно, поддержка в языке принципа полиморфизма сокращает размер программы.

 

2.2. Описание  иерархии объектных типов

 

В основе иерархии лежит класс  TPoint.

Данные: Тип TPoint используется для многих свойств и обычно определяет экранные координаты левого верхнего угла прямоугольной области. X определяет горизонтальную координату, а Y - вертикальную.

 Перечислим методы, выполняющие  определенные действия с объектом типа TPoint:

procedure Show; – рисует точку на экране. Чтобы точка была заметнее будем рисовать ее в виде маленькой окружности;

procedure Hide; – стирает (прячет) точку; но чтобы при перемещении точки за ней оставался след, будем стирать точку не белым, а заданным в экземпляре класса цветом color.

procedure Move(newx, newy : integer); – перемещает точку в новое положение;

procedure ChangeColor(newc : integer); – изменяет цвет точки.

Определим новый класс TCircle (окружность).

Данные: окружность определяется центром в с координатами х и у и радиусом r . Объекты этого типа можно сделать видимыми и невидимыми, задать цвет, переместить. В связи с этим можно определить класс TCircle как потомок класса TPoint .Очевидно, что методы Show и Hide у каждого класса свои, но логика метода Move совпадает.

Перечислим методы, выполняющие определенные действия с объектом типа TCircle:

Спрятать объект; {вызов метода Hide }

Изменить координаты объекта { x := NewX ; y := NewY }

Отобразить объект {вызов метода Show };

Определим новый класс TCrug (разработанный самостоятельно)

Данные: окружность определяется центром в с координатами х и у и радиусом r .

HandleEvent - метод вызывает обработчик заданного события.

Constructor.Create - определяет метод используемый для создания объекта из класса

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

А так же методы класса TPoint и TCircle. 
Глава №3

Описание окна приложения на этапе его работы.

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

 

При нажатии  клавиши «L»,окружность вращается против часовой стрелки, это можно наблюдать по изменению наклона диаметра.

 

При нажатии клавиши «R»,окружность вращается по часовой стрелке, это можно наблюдать по изменению наклона диаметра.

 

При нажатии клавиш с численными значениями, изменяется цвет окружности.

 

Список литературы

 

  1. Учебно-методическое пособие «Высокоуровневые методы информатики и программирования, Гутман Г.Н, г. Самара,2007 год.
  2. Учебно-методическое пособие «Информатика и программирование, работа в системе Pascal ABC» Гутман Г.Н, г. Самара,2007 год.

 

4.Приложения

uses Crt, GraphABC;

const

  Left = 333;

  Right = 331;

  Up = 328;

  Down = 336;

  Esc = 27;

function RdKey: integer;

Информация о работе Разработка Windows-приложения в среде Pascal ABC