Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

.docx
Скачиваний:
46
Добавлен:
18.03.2015
Размер:
27.22 Кб
Скачать

1.Под объектно-ориентированным программированием (object-oriented programming, OOP) следует понимать методологию реализации, при которой программа организуется, как совокупность сотрудничающих объектов, каждый из которых является экземпляром какого-либо класса, а классы образуют иерархию наследования.

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

Модель – объект, обладающий теме же свойствами, что и исходник.

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

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

Свойство - характеристика объекта, представленная в виде переменной, являющейся членом класса.

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

Экземпляр - некоторая сущность в виртуальном пространстве, обладающая определённым состоянием и поведением, имеющая заданные значения свойств (атрибутов) и операций над ними (методов).

Активность объектов: Поведение В терминологии объектно-ориентированного подхода понятия "действие", "сообщение" и "метод" являются синонимами. Т.е. выражения "выполнить действие над объектом", "вызвать метод объекта" и "послать сообщение объекту для выполнения какого-либо действия" эквивалентны. Поведение или активность (behavior) - действия и реакции объекта, выраженные в терминах передачи сообщений и изменения состояния; видимая извне и воспроизводимая активность объекта. Методы - Функции и процедуры класса.

2. Наследование: Классы содержат данные и методы. В ООП методы и данные одного класса могут передаваться другим классам, т.е. объекты могут наследовать свойства друг друга. Класс наследует свойства другого класса, обладает теми же возможностями, что и класс, от которого он порожден. Этот принцип называется наследованием. Порожденный класс называется потомком, а тот, от кого он порожден - предком. Благодаря новым свойствам, которыми дополняется потомок, порожденный класс может обладать большими возможностями, чем его предок. Механизм наследования обеспечивает возможность многократного применения программного кода. Таким образом, классы могут быть представлены в виде иерархии. Наследование - механизм, позволяющий объектам класса наследовать характеристики (данные и методы) более простых и общих типов (классов); - средство получения новых классов из существующих.

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

Иерархия классов - это коллекция классов с их зависимостями типа “предок - потомок”.

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

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

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

Конструктор-метод объекта, вызываемый автоматически при его создании.

Деструктор-метод объекта, вызываемый автоматически при его удалении

4, Полиморфизм. 

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

Каждый метод может быть переобъявлен в потомке. Однако, вызов метода основного класса не вызовет переобъявленный метод, несмотря на настоящий класс объекта.

Эта ситуация решается использованием полиморфных методов. Метод может быть объявлен в основном классе полиморфным и перереализован в потомке.

Если мы имеем ссылку на объект основного класса, но созданный используя конструктор потомка, тогда вызов полиморфного метода основного класса будет осуществлять метод настоящего класса.

Эта ситуация называется runtime binding. Это выполняется во всех вызывающих выражениях, не только в явных.

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

Например, метод класса Музыкальных инструментов - PlayMusicForAnOrchestra - может быть определен как общим метод, который может использоваться с любой категорией инструментов. Этот метод написан таким образом, что не важно, какой именно инструмент получает задание играть, однако для классов, описывающих конкретные инструменты, данный метод должен быть переопределен (override), что даст возможность определить конкретные действия, учитывая особенности конкретного инструмента.

5.Помещение объектов в переменные различных типов

Объект типа b м.б. помещен в переменную типа a , только если a является предком. В переменную типа a м.б. помещен объект типа b, если b является потомком класса a.

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

Пусть есть класс предок А и класс потомок Б, у каждого из которых есть метод foo(), если объект класса Б лежит в переменной класса А(А *О = new Б) , то при вызове метода foo() при переменной О будет вызван метод foo() класса А. Для того чтобы в такой ситуации вызвался метод foo() класса Б, нужно в классе А этот метод объявить виртуальным.

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

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

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

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

- Поля, свойства и методы секции protected также доступны только внутри модуля с описываемым классом. Но — и это главное — они доступны в классах, являющихся потомками данного класса, в том числе и в других модулях. Такие элементы особенно необходимы для разработчиков новых компонентов — потомков уже существующих. Оставляя свободу модернизации класса, они все же скрывают детали реализации от того, кто только пользуется объектами этого класса.

7. Событие в объектно-ориентированное программировании — это сообщение, которое возникает в различных точках исполняемого кода при выполнении определённых условий.

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

События предназначены для того, чтобы иметь возможность предусмотреть реакцию программного обеспечения.[1]

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

Типы событий:

1)Пользовательские

  • Нажатие\отпускание клавиши клавиатуры

  • Нажатие\отпускание кнопки мыши

  • Передвижение мыши

2)Системные

  • Перерисовка

  • Закрытие

  • Минимизация

  • Максимизация

  • Изменение размера

  • Таймер

Событие — это механизм, который связывает случай с каким-либо потоком.

1. Чисто-событийный подход (чистое Win32 программирование)

2. Процедурно-событийный подход (CBuilder, Delphi)

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

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

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

Виды событий, которые могут произойти, могут быть разделены на две главные категории: пользовательские события и системные события. Пользовательские события — действия, производимые пользователем. Эти события всегда связаны с действиями пользователя. Системные события — события, которые ОС совершает для вас.

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

 Другим решением будет объявление потомка от двух классов. Это называется множественным наследованием. При множественном наследовании потомок наследует все методы и свойства всех своих предков.

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

Интерфейс может иметь предков и наследовать все их методы. Но интерфейс не реализует методы. Классы, поддерживающие интерфейс, должны реализовывать его методы.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]