Основы программирования в паскале

Автор работы: Пользователь скрыл имя, 16 Сентября 2009 в 13:41, Не определен

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

Учебник по программированию

Файлы: 16 файлов

Pascal процедуры и функции.doc

— 181.00 Кб (Просмотреть файл, Скачать файл)

Pascal динамические структуры данных.doc

— 147.00 Кб (Просмотреть файл, Скачать файл)

Pascal и графика.DOC

— 116.50 Кб (Просмотреть файл, Скачать файл)

Program Graph.doc

— 19.00 Кб (Просмотреть файл, Скачать файл)

Unit GraphApp.doc

— 21.50 Кб (Просмотреть файл, Скачать файл)

Unit GraphObj.doc

— 21.50 Кб (Просмотреть файл, Скачать файл)

Краткие основы Паскаля.doc

— 217.00 Кб (Просмотреть файл, Скачать файл)

Общие понятия программирования.doc

— 80.00 Кб (Просмотреть файл, Скачать файл)

Основные принципы ООП.doc

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

     ОСНОВНЫЕ  ПРИНЦИПЫ ООП 

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

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

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

     Какими  мощными средствами располагает  объектно-ориентированное программирование, наглядно демонстрирует библиотека Turbo Vision, входящая в комплект поставки Турбо Паскаля

     Объектно-ориентированное  программирование основано на «трех  китах» - трех важнейших принципах, придающих объектам новые свойства.

     Этими принципами являются инкапсуляция, наследование и полиморфизм.

     Инкапсуляция

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

     Инкапсуляция  позволяет в максимальной степени  изолировать объект от внешнего окружения.

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

     Другим  немаловажным следствием инкапсуляции является легкость обмена объектами, переноса их из одной программы в другую. Можно сказать, что ООП «провоцирует» разработку библиотек объектов, таких как Turbo Vision. 

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

     Наследование  есть свойство объектов порождать своих потомков.

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

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

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

     Полиморфизм

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

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

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

     Пример-лекция иллюстрирующий основные принципы

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

     (на примере двух работающих модулей и тексте программы)

     Обработанный  материал из учебного пособия Фаронов  В.В. “Turbo Pascal 7.0” Учебное пособие. Начальный курс. Нолидж. Москва. 2001 г. (с.179-194) 

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

      

     

     Вид создаваемого программой экрана. 
 

     Для перемещения изображений в программе  будут использоваться:

  • клавиши управления курсором,
  • клавиши Ноте, End, PgUp, PgDn (для перемещения по диагональным направлениям),
  • клавиша Tab для выбора перемещаемого объекта.
  • Выход из программы - клавиша Esc.
 

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

     Для решения задачи создадим два модуля GraphObj и GraphApp.

      В Модуле GraphObj описываются все используемые объекты. Модуль компилируется в библиотечный файл GraphObj.tpu.

      Основная  программа будет использовать модуль GraphObj с описанием объектов.(Далее текст рабочего модуля. Файл: GraphObj.pas. ) 

Unit GraphObj;

     Interface

     type

         TGraphObj=object {объект – родитель в рамках которого инкапсулированы поля и методы, общие для всех остальных объектов<=Свойство объектов-инкапсуляция }

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

                    

            x,y:integer; {Координаты реперной точки}

                      color:word; {Цвет фигуры}

      Public {Методы объекта будут доступны пользователю. Директива public отменяет действие директивы private. Для описания методов используются  процедуры и функции,  конструкторы и деструкторы.}

          Constructor Init(aX,aY:integer; aColor:word); { Конструкторы предназначены для создания конкретного экземпляра объекта обращение к конструктору должно предшествовать обращению к любому виртуальному методу. Типичное действие, реализуемое конструктором, состоит в наполнении объектных полей конкретными значениями.}

            Procedure Draw (aColor:word);virtual; {Вычерчивает объект заданным цветом aColor В объекте TGraphObj процедура Draw определена как виртуальная («воображаемая»). Абстрактный объект TGraphObj не предназначен для вывода на экран, однако наличие процедуры Draw в этом объекте говорит о том, что любой потомок TGraphObj должен иметь собственный метод Draw, с помощью которого он может показать себя на экране. (<=Свойство объектов – полиморфизм).При трансляции объекта, содержащего виртуальные методы, создается так называемая таблица виртуальных методов (ТВМ), количество элементов которой равно количеству виртуальных методов объекта. В этой таблице будут храниться адреса точек входа в каждый виртуальный метод. В нашем примере ТВМ объекта TGraphObj хранит единственный элемент - адрес метода Draw.} 

                        Procedure Show; {Показывает объект - вычерчивает его цветом Color. Для реализации своих действий и Hide, и Show обращаются к виртуальному методу Draw.} 

                        Procedure Hide; {Прячет объект - вычерчивает его цветом фона}  

                        Procedure MoveTo (dX,dY:integer); {Перемещает объект в точку с координатами X+dX и Y+dY. Если потомок TGraphObj (например, TLine) хочет переместить себя на экране, он обращается к родительскому методу MoveTo.

        В этом методе  сначала с помощью  Hide объект стирается с экрана, а затем с помощью Show показывается в другом месте.} 

                              end; {Конец описания объекта TGraphObj} 

      {Далее  мы создадим несколько  потомков объекта  TGraphObj. Каждый из них будет иметь собственный конструктор, с помощью которого ТВМ каждого потомка настраивается так, чтобы ее единственный элемент содержал адрес нужного метода Draw.

        Такая процедура  называется поздним связыванием объекта.

      Позднее связывание позволяет  методам родителя обращаться к виртуальным методам своих потомков и использовать их для реализации специфичных для потомков действий. (Это опять - полиморфизм)(В нашем примере она совпадает с координатами точки в описываемом ниже объекте TPoint, с центром окружности в объекте TCircle, первым концом прямой в объекте Liпе и с левым верхним углом прямоугольника в объекте TRect.)} 

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

  TPoint = object(TGraphObj) {Описание объекта TPoint. Потомки объекта TGraphObj: TPoint, TLine, TCircle наследуют поля и методы родительского объекта. TRect – потомок объекта TLine <=Свойство объектов – наследование. } 

            Procedure Draw (aColor:word);virtual;

                end; 

         TLine= object(TGraphObj)

                        dx,dy:integer; {Приращения координат второго конца} 

                Constructor Init(X1,Y1,X2,Y2:integer; aColor:word); {Инициализируется новый объект TLine который является наследником объекта TGraphObj,но скоро будет «отцом» объекта TRect,а новый обьект будет по прежнему использовать «дедовскую» виртуальную процедуру Draw. По-этому вместо слова Procedure пишем Constructor }

                Procedure Draw (aColor:word);virtual;

                end;

      {Поскольку вызов MoveTo ,будет происходить в рамках объекта TLine, используется ТВМ этого объекта и вызывается его метод Draw, вычерчивающий прямую. Если бы перемещалась окружность, ТВМ содержала бы адрес метода Draw объекта TCircle и визуализация-стирание объекта осуществлялась бы с помощью этого метода. (Следует выполняется третье свойство объектов - полиморфизм)} 

         TCircle = object(TGraphObj)

                  r:integer; {вводится новое поле объекта, которое отсутствует у предка - радиус}

                  Constructor Init(aX,aY,aR:integer; aColor:word);{Перед использованием «виртуальной» процедуры Draw при инициализации нового объекта всегда заменяем слово Procedure на слово Constructor. Так как выводиться на экран будет новый объект. То есть меняем ссылку с указанием параметров вывода предыдущего объекта на новые. В данном случае на следующем шаге Draw выведет на экран – окружность. }

                  Procedure Draw (aColor:word);virtual;

                  end; 

         TRect= object(TLine) {TRect – потомок объекта TLine}

              Procedure Draw (aColor:word);virtual;

              end; 

{Описание методов (- «телодвижений» объектов) производится обычным для Паскаля способом в любом месте раздела описаний (обычно в разделе Implementation объектного модуля), но после описания объекта.} 

Implementation

      {Исполняемая  часть содержит  описания всех  объектных методов}  

              Uses Graph;

              Constructor TGraphObj.Init; {Инициализируется родительский объект TGraphObj. Далее используется виртуальный метод Draw, по-этому вместо слова Procedure используется слово Constructor }

Основы разработки программ.doc

— 148.00 Кб (Просмотреть файл, Скачать файл)

Паскаль на 5-КУ 85 листов.doc

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

Модуль CRT.doc

— 30.00 Кб (Просмотреть файл, Скачать файл)

Модуль Graph.doc

— 77.50 Кб (Просмотреть файл, Скачать файл)

Структура модуля.doc

— 38.00 Кб (Просмотреть файл, Скачать файл)

Практичесое занятие по работе с модулем граф.doc

— 52.00 Кб (Просмотреть файл, Скачать файл)

Целочисленная арифметика TURBO PASCAL.doc

— 92.00 Кб (Просмотреть файл, Скачать файл)

Информация о работе Основы программирования в паскале