74246

Объектно-ориентированное программирование. Теоретические основы ООП

Лекция

Информатика, кибернетика и программирование

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

Русский

2014-12-30

372.5 KB

2 чел.

Лекция

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

Теоретические основы ООП

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

Процедурное программирование

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

         Структурное программирование (стиль программирования) – совокупность рекомендуемых  технологических приемов.

Контроль на этапе разработки, Метод пошаговой детализации с использованием 3 базовых структур (следование,  альтернатива, повторение)

          Следующий этап  - повышение роли организации данных (Паскаль).

Логическим следствием развития этого этапа стал модульный подход к разработки программ

Модульное программирование предполагает выделение групп подпрограмм, использующие одни и те же глобальные данные  (типы данных).

Например, System

В виде модулей  реализованы также библиотеки классов и компонент (VCLVisual library Component), которая была разработана для Делфи и используется в С++ Builder

Windows  , Messages, Dialogs,  Forms   

SysUtils – содержит библиотеку классов стандартных исключений;

Graphics – содержит библиотеку   графических компонент.

        <структура модуля > ::= Unit <имя>;

                                       Interface

                                         <интерфейсная секция>

                                        Implementation

                                          <секция реализации>

                                      [  Initialization

                                            <секция инициализации>]

                                      [  Finalization

                                            <завершающая  секция>]

                                        End.

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

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

Идея заключается в стремлении связать данные с обрабатываемыми эти данные процедурами и функциями в единое целое – класс.

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

Библиотека классов Делфи и С++ - это фактически набор «кирпичиков» для построения программ.

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

    

Класс ОКНО:

Поля X1,Y1,X2,Y2,Color

Метод Инициализировать(ax1,ay1,ax2,ay2,acolor)

Метод Изобразить

Конец описания

И в Делфи и в С++  задание класса:

Class <имя класса>

{ private:    <внутренние (недоступные) компоненты класса>;

 protected:     <защищенные компоненты класса >;

 public:      <общие компоненты класса >;

};

Type TPoint = class   {класс точка на плоскости}

                                X,Y: Integer;

                                Visible:Boolean;

                                  Color:word;

                                 Procedure Init(InitX, InitY, Col:integer);

          Procedure Show; ;        {нарисовать}

                                 Procedure MoveTo(StepX, StepY: integer); {переместить}

                                 Function IsVisible:boolean;     {сделать видимой}

                             End;

var X1,X2:Tpoint;

   class point

 {    int x,y,color;   //координаты

public:

int getx(){return}    //метод получения координаты

void setpoint(int ncv)   //метод задания координаты и цвета

}

Point X1,X2;   {объекты}

Переменные типа класс называются объектами.

     Операции над объектами:

  •  Создание, уничтожение;
  •  Модификация (обращение к объекту для изменения его состояния);
  •  Селекция ( ответ объекта о его состоянии);
  •  Итерация (доступ к содержанию объекта по частям, например, массив).

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

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

В Делфи  все объекты динамические.

Средства разработки классов:

Механизмы инкапсуляции, наследования и полиморфизма.

Инкапсуляция -   это объединение  сущностей, из которых состоит класс, в единое целое.

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

Структура описания класса-потомка:

Type <имя класса потомка>= class (<имя класса родителя >)

                                                   <Новые поля класса потомка>

                                                   <Новые методы класса потомка>

Type Tcircle = class (Tpoint)   {класс окружность}

                             Radius:integer;

                             Procedure Show;

                         End;

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

Class <имя производного класса (потомка)>:

           <вид наследования>  <имя базового класса>

         { <тело класса>}

вид : private   (закрытый),

protected (защищенный), public (общедоступный)

Class A

{ private:  int nz1a;

 protected: int nz2a;

 public :

    int nza;

    void print(void)

     {…..}

}

class B: private A      <все компоненты А не доступны в В>

 {private: int nz1b;

…….

}

  class C: protected A     <защищенное поле и общедоступное поле А  доступны в В, но со свойством  protected >

{….}

   

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

Все классы Делфи и библиотеки VCL (С++ Builder используется библиотека объектов VCL (Visual Component Library) ) порождены от единственного родителя -  класса Tobject. Этот класс не имеет полей, но имеет методы общего назначения, обеспечивающие весь жизненный цикл объектов – от создания до уничтожения. В Делфи запрещено множественное наследование – каждый класс имеет только одного родителя. Наследование обеспечивает создание дерева родственных объектов.  В С++ Builder классы конструируются по правилам Делфи, но используя синтаксис С++

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

Type Tcircle = class (Tpoint)

                             Radius:integer;

                             Procedure Init(InitX, InitY, R:integer);

      Procedure Show;         {нарисовать}

                             Procedure MoveTo(StepX, StepY: integer); {переместить}

                             Function IsVisible:boolean;     {сделать видимой}

                         End;

Для реализации полиморфизма в Делфи  используются механизмы виртуальных и динамических методов.

Для описания виртуального метода используется слово virtual

Динамическогоdynamic

      Procedure Show;   virtual;      {нарисовать}

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

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

В состав любого класса входят 2 специальных метода – конструктор и  деструктор.

Конструктор порождает объект и выполняется первым. Конструктор распределяет объекты в динамической памяти.   

Деструктор удаляет объекты из кучи.

      Описания их с помощью зарезервированных слов – Constructor  , Destructor .

У класса  Tobject   - эти методы называются Create и Destroy, так они называются и в большинстве потомках.

    

Type TPoint = class

                                 X,Y: Integer;

                                Visible:Boolean:

                                  Color:word;

                                  Constructor Create (InitX, InitY, Col:integer);

                                  Destructor Destroy;

          Procedure Show;  virtual       {нарисовать}

                                 Procedure MoveTo(StepX, StepY: integer); {переместить}

                                 Function IsVisible:boolean;     {сделать видимой}

                           End

Class A

{ int a1;

public:

virtual void Show(void)  <описание виртуальной функции>

}

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

Например,

Private [praivit]– закрытые – доступны только для методов этого класса;

Protected [protekted]– защищенные -доступны  для методов этого класса и его потомкам

Public –доступные -  нет ограничений на область видимости

Пример.  Код программы при создании Приложения

В Делфи

unit Unit1;

interface

uses

 Windows, Messages, SysUtils, Variants, Classes, Graphics,   

 Controls, Forms,  Dialogs;

type

 TForm1 = class(TForm)

 private

   { Private declarations }

 public

   { Public declarations }

 end;

var  Form1: TForm1;

implementation

{$R *.dfm}

end.

Код проекта 

program Project1;

uses

 Forms,

 Unit1 in 'Unit1.pas' {Form1};

{$R *.res}

begin

 Application.Initialize;

 Application.CreateForm(TForm1, Form1);

 Application.Run;

End. .

Этапы разработки ПО с использованием ООП.

  1.  Анализ предметной области. На этом этапе выполняется объектная декомпозиция разрабатываемой системы. По результатам анализа разрабатывается структурная схема программного продукта, на которой показываются основные объекты и сообщения, передаваемые между ними.
  2.  Проектирование:
  •  логическое проектирование, при котором принимаемые решения практически не зависят от условий эксплуатации (операционной системы и используемого оборудования); Результатом является иерархия или диаграмма классов, отражающие взаимосвязь классов, и описание классов.
  •  Физическое проектирование включает объединение описаний классов в модули, выбор схемы их подключения (статическая или динамическая компоновка), определение способов взаимодействия с оборудованием, с операционной системой и/или другим программным обеспечением (например, базами данных, сетевыми программами), обеспечение синхронизации процессов для систем параллельной обработки и т.д.
  1.  Эволюция системы – это процесс поэтапного подключения классов к проекту. Создание основной программы и тестирование.
  2.  Модификация – процесс добавления новых функциональных возможностей или изменение существующих свойств системы.

Технология разработки  Windows приложения

Delphi и Visual C++ - это объединение идеи событийного управления, ООП и визуального программирования.

  1.  В Delphi и С++ Builder используется библиотека объектов VCL (Visual Component Library) - библиотека визуальных компонент.  

Практически эти среды отличаются языком разработки:

Delphi использует Object Pascal, С++ Builder – C++

Любое приложение состоит из минимум 3 объектов: объекта - приложения, объекта - формы (окна) и объекта экрана.

Все окна приложения строятся на базе класса формы TForm.   

       B VCL форма - это окно.

Объект приложения строится на базе класса TApplication.

  1.  Delphi и С++ Builder - пример RAD системы ( Rapid Application Development) -   Среда быстрой разработки приложений в основе которой лежит технология визуального проектирования и событийного  программирования. Проектировщик создает проект окна и переносит на него мышью нужные элементы с панели компонент. Затем определяет свойства компонент и пишет обработчики событий.

  1.  Основные принципы событийного программирования.

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

Примеры событий:

OnClick – щелчек мыши

OnDblClick  двойной щелчек мыши

OnMouseDown   нажатие кнопки мыши

OnMouseUp       отпускание кнопки мыши

OnMouseMove  перемещение  мыши

OnKeyPressed  нажатие клавиши клавиатуры

OnKeyUp    отпускание клавиши клавиатуры


Среда программирования Delphi.

При вызове интегрированной среды Delphi на экране появляется окно:

главное меню;

панель быстрого доступа;

палитра компонент; (Tool Palette)

инспектор объектов (Object Inspector);

чистое окно формы (Form1) и под ним чистое окно программы (Unit1).

RAD Studio XE7

Embarcadero® RAD Studio XE7 — это комплексное решение для разработки программного обеспечения, ускоряющее создание нативных приложений для Windows, OS X, iOS и Android на базе единого исходного кода.

Для пользователя нативными являются приложения, которые требуют установки. В целом, это верно, как и то, что такие приложения разрабатываются специально под мобильные платформы (iOS, Android, Windows Phone). Поэтому от разработчика требуются навыки программирования в конкретной среде разработки (xCode для iOS, eclipse для Android).

На выходе это дает приятный внешний вид и беспроблемное взаимодействие приложения с мобильной ОС. Нативные приложения также намного опережают и гибридные и веб-приложения в вопросах безопасности. Такие приложения с наименьшим поглощением ресурсов используют камеру, микрофон, акселерометр, плеер и прочие функции. Условно нативные приложения можно поделить на две группы: приложения, которым необходимо интернет-соединение, и оффлайн приложения.

На смену библиотеки классов VCL пришла кроссплатформенная библиотека FireMonkey (один из ее разработчиков Евгений Крюков из Улан-Удэ) сейчас работает в Embarcadero.

 

Embarcadero Technologies — американская компания, занимающаяся разработкой программного обеспечения для создания средств управления базами данных и самих баз данных. Компания была основана в октябре 1993 года 

Компания имеет офисы в Торонто, Мельбурне, Мюнхене, Мейденхед (Великобритания), Яссах (Румыния), Санкт-Петербурге (Россия).

7-го мая 2008 года корпорация Borland объявила о продаже своей дочерней компании CodeGear. CodeGear занималась созданием популярных средств разработки программного обеспечения: Delphi, C++Builder и другими. В итоге, Embarcadero приобрела CodeGear за $23 млн и с обязательством погашения $7 млн долгов Borland.

Visual Studio 2015

12 ноября 2014г в Нью Йорке состоялась конференция Microsoft Connect(), на которой анонсированы новые продукты и технологии. Выпущена предварительная версия Visual Studio 2015, специальная бесплатная редакция Visual Studio Community 2013, , обновлены инструменты кросс-платформенной разработки, в Visual Studio появился эмулятор ОС Android.

Литература

  1.  Г.С. Иванова, и др.  Объектно–ориентированное программирование.-М. Изд-во МГТУ им. Н.Э. Баумана, 2001.-320с.
  2.  Д. Осипов. Delphi Программирование для Windows, OS X, iOS и Android. -  СПб: БХВ-Петербург, 2014

PAGE  12


 

А также другие работы, которые могут Вас заинтересовать

74951. Повторення вивченого «Нумерація чисел від 21 до 100» 45 KB
  Кожен герой мультика приготував для вас своє завдання. Увага відгадайте герої якого мультфільму пропонують вам перше завдання звучить пісня Ю. Щоб нікого не образити ми виконаємо і те і те завдання. Фрагмент пісні з Бременських музикантів готові малюнки кожної тварини яка буде пропонувати завдання.
74952. Розв’язування задач на зведення до одиниці. Вправи на засвоєння таблиці множення числа 8. Розпізнання многокутників 32.5 KB
  Удосконалювати вміння учнів розвязувати задачі на зведення до одиниці; домогтися засвоєння таблиці множення числа 8 напамять; закріплювати знання правил порядку дій; розвивати обчислювальні навички та вміння розвязувати рівняння...
74953. Письменное вычитание трёхзначных чисел. Сложные задачи – цена, количество, стоимость. Геометрический материал 188.5 KB
  Цель: Учить детей письменному вычитанию трехзначных чисел столбиком; закрепить умение делать правильный мотивированный выбор действия в задаче; выбирать арифметическое действие для решения задачи; составлять равенства на умножение деление; классифицировать и обобщать.
74954. Усвоение таблицы умножения и деления. Составление задачи по выражению 56 KB
  Цель. Совершенствовать умение решать выражения на основе знаний таблицы умножения и деления; развивать умение решать уравнения на нахождение неизвестного делителя; закреплять умение составлять и решать задачи по выражению, задачи на приведение к единице...
74955. Повторение табличного деления и умножения чисел 58.5 KB
  Цели и задачи: Образовательные: усвоение полученных знаний, умений и навыков при табличном делении и умножении; Развивающие: развивать наблюдательность и умение рассуждать; развивать математические способности, логическое мышление, внимание и интерес к предмету через игру...
74956. Додавання й віднімання виду 430 + 500, 430 + 50, 760 – 400, 760 – 40. Розширена задача на спосіб зведення до одиниці. Складена задача, яка включає суму двох або трьох доданків 54 KB
  Мета. Закріплювати вміння учнів додавати круглі трицифрові числа різними способами. Працювати над розв’язуванням задач. Розкриватимемо таємниці єгипетських пірамід. Розвивати обчислювальні навички, логічне мислення, пам’ять.
74957. Множення на 0, 1 35.5 KB
  МЕТА: Сформувати вміння та навички учнів при обчисленні прикладів на множення 0, 1; розвивати обчислювальні навички, розвивати пізнавальний інтерес до вивчення математики, виховувати уважність.
74958. Сравнение задач на пропорциональное деление. Деление с остатком трехзначных чисел на круглые десятки 43 KB
  Задачи: Развивать умение решать задачи на пропорциональное деление. Развивать навыки деления трехзначных чисел на круглые с остатком. Развивать логическое мышление, память, внимание. Воспитывать дружеские отношения в соревновании.
74959. Вправи і задачі на засвоєння таблиці ділення на 8. Задачі на знаходження невідомого діленого шляхом складання рівняння 60 KB
  Мета: закріпити таблицю ділення на 8 навчити розвязувати задачі на знаходження невідомого діленого складаючи рівняння повторити зв’язок дій множення і ділення; формувати вміння розвязувати задачі на три дії; розвивати логічне мислення увагу...