Тема 3.1 (1). Тема 1 основы объектноориентированного программирования (ооп) Объектноориентированное программирование (ооп)
Скачать 446.14 Kb.
|
Тема 3.1 ОСНОВЫ ОБЪЕКТНО-ОРИЕНТИРОВАННОГО ПРОГРАММИРОВАНИЯ (ООП) Объектно-ориентированное программирование (ООП) – это методология программирования, основанная на представлении программы в виде совокупности объектов, каждый из которых является экземпляром определенного класса, а классы образуют иерархию наследования. Взаимодействие программных объектов в такой системе осуществляется путем передачи сообщений (рис.1). Рисунок 1 - Взаимодействие программных объектов Системы объектно-ориентированного программирования (ООП) дают возможность визуализировать процесс создания графического интерфейса разрабатываемого приложения. Взаимодействие программных объектов между собой и их изменения описываются с помощью программного кода. Создание программного кода в ООП базируется на использовании алгоритмических структур различных типов (линейной, ветвления, цикла), исполнителями которых выступают программные объекты. В основе объектно-ориентированного язык программирования лежат два основных понятия: объект и класс. Объект – это структурированная переменная, содержащая всю информацию о некотором физическом предмете или реализуемом в программе понятии. Класс – это описание множества объектов программирования (объектов) и выполняемых над ними действий. Пример, допустим, нам в программе необходимо работать со странами. Страна – это абстрактное понятие. У нее есть такие характеристики, как название, население, площадь, флаг и другое. Для описания такой страны будет использоваться класс с соответствующими полями данных. Такие страны, как Россия и Украина будут уже объектами (конкретными представителями типа страна). Объект в программировании — некоторая сущность в виртуальном пространстве, обладающая определенным состоянием и поведением, имеющая заданные значения свойств (атрибутов) и операций над ними, т.е. объект имеет состояние, поведение и идентичность. Состояние объекта характеризуется перечнем (обычно статическим) всех свойств данного объекта и текущими (обычно динамическими) значениями каждого из этих свойств. Каждый объект обладает определенным набором свойств, первоначальные значения которых можно установить. Свойства – это характеристики объекта. Поведение - это то, как объект действует и реагирует; поведение выражается в терминах состояния объекта и передачи сообщений. Иными словами, поведение объекта - это его наблюдаемая и проверяемая извне деятельность. Операцией называется определенное воздействие одного объекта на другой с целью вызвать соответствующую реакцию. C одной стороны, поведение объекта изменяет его состояние. С другой – поведение зависит от состояния. Поведение объекта строится из его операций. Существует три вида операций - Модификатор - операция, которая изменяет состояние объекта; - Селектор - операция, считывающая состояние объекта, но не меняющая состояния; - Итератор - операция, позволяющая организовать доступ ко всем частям объекта в строго определенной последовательности. Идентичность - это такое свойство объекта или такой набор свойств, который отличает его от всех других объектов. Программные объекты обладают свойствами, могут использовать методы и реагируют на события. Каждый объект обладает определенным набором свойств, первоначальные значения которых можно установить. Значения свойств объектов можно изменять и в программном коде: Объект.Свойство := Значение Свойства Метод в объектно-ориентированном программировании — это функция или процедура, принадлежащая какому-то классу или объекту. Метод состоит из некоторого количества операторов для выполнения какого-то действия и имеет набор входных аргументов. Различают простые методы и статические методы (методы класса): - простые методы имеют доступ к данным объекта (конкретного экземпляра данного класса), - статические методы не имеют доступа к данным объекта и для их использования не нужно создавать экземпляры (данного класса). Методы предоставляют интерфейс, при помощи которого осуществляется доступ к данным объекта некоторого класса, тем самым, обеспечивая инкапсуляцию данных. В зависимости от того, какой уровень доступа предоставляет тот или иной метод, выделяют: - открытый (public) интерфейс — общий интерфейс для всех пользователей данного класса; - защищѐнный (protected) интерфейс — внутренний интерфейс для всех наследников данного класса; - закрытый (private) интерфейс — интерфейс, доступный только изнутри данного класса. Событие в объектно-ориентированном программировании — это сообщение, которое возникает в различных точках исполняемого кода при выполнении определенных условий. События предназначены для того, чтобы иметь возможность предусмотреть реакцию программного обеспечения. Для решения поставленной задачи создаются обработчики событий: как только программа попадает в заданное состояние, происходит событие, посылается сообщение, а обработчик перехватывает это сообщение. Событие, по сути, сообщает об изменении состояния некоторого объекта. Событие может создаваться пользователем (щелчок мышью или нажатие клавиши) или быть результатом воздействия других объектов. В качестве реакции на событие вызывается определенная процедура, которая может изменять свойства объекта или вызывать его методы. Основные принципы объектно-ориентированного программирования ООП сочетает лучшие принципы структурного программирования с новыми мощными концепциями, базовые из которых называются инкапсуляцией, полиморфизмом и наследованием 1) Инкапсуляция — это объединение в единое целое данных и алгоритмов обработки этих данных. В рамках ООП данные называются полями объекта (свойствами), а алгоритмы - объектными методами или просто методами. 2) Наследование - способности языка позволять строить новые определения классов на основе определений существующих классов. По сути, наследование позволяет расширять поведение базового (или родительского) класса, наследуя основную функциональность в производном подклассе (также именуемом дочерним классом) Т.е. наследование представляет собой процесс, в ходе которого один объект приобретает свойства другого объекта. 3) Полиморфизм - это свойство родственных объектов (т.е. объектов, имеющих одного общего родителя) решать схожие по смыслу проблемы разными способами. В общем смысле, концепцией полиморфизма является идея "один интерфейс, множество методов". Это означает, что можно создать общий интерфейс для группы близких по смыслу действий. Выбор конкретного действия, в зависимости от ситуации, возлагается на компилятор. ООП также характеризуется следующими принципами: - все является объектом; - вычисления осуществляются путем взаимодействия (обмена данными) между объектами, при котором один объект требует, чтобы другой объект выполнил некоторое действие; объекты взаимодействуют, посылая и получая сообщения; сообщение — это запрос на выполнение действия, дополненный набором аргументов, которые могут понадобиться при выполнении действия; - каждый объект имеет независимую память, которая состоит из других объектов; - каждый объект является представителем класса, который выражает общие свойства объектов данного типа; - в классе задается функциональность (поведение объекта); тем самым все объекты, которые являются экземплярами одного класса, могут выполнять одни и те же действия; - классы организованы в единую древовидную структуру с общим корнем, называемую иерархией наследования; память и поведение, связанное с экземплярами определенного класса, автоматически доступны любому классу, расположенному ниже в иерархическом дереве. Проект. Этапы разработки проекта Результатом процессов программирования и проектирования является проект, который объединяет в себе программный код и графический интерфейс. Графический интерфейс необходим для реализации интерактивного диалога пользователя с запущенным на выполнение готовым проектом. Визуальное программирование позволяет делать графический интерфейс разрабатываемых приложений на основе форм и управляющих элементов. В роли основных объектов при визуальном программировании выступают формы (Forms). Форма представляет собой окно, на котором размещаются управляющие элементы. Управляющие элементы — это командные кнопки (CommandButton), переключатели, или «флажки» (Checkbox), поля выбора, или «радиокнопки» (OptionsButton), списки (ListBox), текстовые поля (TextBox) и др. Этапы разработки проекта: 1) Определяется цель проекта (что в конечном итоге должно получиться). 2) Разрабатывается алгоритм решения задачи. 3) Определяется перечень входных и выходных данных, формулы расчета. 4) Определяются имена и типы используемых в проекте переменных. 5) Определяются способы ввода и вывода данных в проекте. 6) Разрабатывается интерфейс формы, и задаются свойства и методы для неё. 7) На форме размещаются элементы управления и задаются для них свойства и методы управления. 8) Записываются процедуры в окне кода программы. 9) Выполняется запуск, тестирование и отладка программы. 10) Выполняется сохранение проекта. Компиляция проекта в приложение. Сохраненный проект может выполняться только в самой системе программирования. Для того чтобы преобразовать проект в приложение, которое может выполняться непосредственно в среде операционной системы, необходимо выполнить компиляцию проекта, в процессе которой приложение сохраняется в исполнимом файле (с расширением ехе). Объектно-ориентированные языки Многие современные языки специально созданы для облегчения объектно- ориентированного программирования. Однако следует отметить, что можно применять техники ООП и для не-объектно-ориентированного языка и наоборот, применение объектно-ориентированного языка вовсе не означает, что код автоматически становится объектно-ориентированным. Как правило, объектно-ориентированный язык (ООЯ) содержит следующий набор элементов: - Объявление классов с полями (данными — членами класса) и методами (функциями — членами класса). - Механизм расширения класса (наследования) — порождение нового класса от существующего с автоматическим включением всех особенностей реализации класса-предка в состав класса-потомка. Большинство ООЯ поддерживают только единичное наследование. - Полиморфные переменные и параметры функций (методов), позволяющие присваивать одной и той же переменной экземпляры различных классов. - Полиморфное поведение экземпляров классов за счёт использования виртуальных методов. В некоторых ООЯ все методы классов являются виртуальными. Некоторые языки добавляют к указанному минимальному набору те или иные дополнительные средства. В их числе: - Конструкторы, деструкторы, финализаторы; - Свойства (аксессоры); - Индексаторы; - Средства управления видимостью компонентов классов (интерфейсы или модификаторы доступа, такие как public, private, protected, feature и др.). Одни языки отвечают принципам ООП в полной мере — в них все основные элементы являются объектами, имеющими состояние и связанные методы. Примеры подобных языков — Smalltalk, Eiffel. Существуют гибридные языки, совмещающие объектную подсистему в целостном виде с подсистемами других парадигм как «два и более языка в одном», позволяющие совмещать в одной программе объектные модели с иными, и размывающие грань между объектно-ориентированной и другими парадигмами за счёт нестандартных возможностей, балансирующих между ООП и другими парадигмами (таких как множественная диспетчеризация, параметрические классы, возможность манипулировать методами классов как самостоятельными объектами, и др.). Примеры таких языков: CLOS, Dylan, OCaml, Python, Ruby, Objective-C. Однако, наиболее распространены языки, включающие средства эмуляции объектной модели поверх более традиционной императивной семантики. Алан Кэй назвал такие языки «склеиванием возможностей» (англ. agglutination of features) в противовес «чистоте стиля» (англ. crystalization of style) языков, воплощающих некую парадигму непосредственно. Примеры таких языков — Симула, C++, Visual Basic, Delphi, Модула, Модула-2, Java, C#, PHP. |