- •Раздел 3. Объектно-ориентированное программирование. Функциональное программирование и интеллектуальные информационные системы. Экспертные системы.
- •Классы и объекты.
- •Создание классов
- •Создание объектов
- •Модульность
- •Примеры иерархий
- •Наследование и композиция
- •Интерфейсы, делегаты и события.
- •Базовые типы данных
- •Int (целое число);
Раздел 3. Объектно-ориентированное программирование. Функциональное программирование и интеллектуальные информационные системы. Экспертные системы.
Классы и объекты.
Класс – это абстрактный тип данных. С помощью класса описывается некоторая сущность (ее характеристики и возможные действия). Включает в себя не только данные, но и функции и процедуры. Функции и процедуры класса называются методами и содержат исходный код, предназначенный для обработки внутренних данных объекта данного класса. Например, класс может описывать студента, автомобиль и т.д. Описав класс, мы можем создать его экземпляр – объект. Класс — это множество объектов, имеющих общую структуру и общее поведение. Класс — описание (абстракция), которое показывает, как построить существующую во времени и пространстве переменную этого класса, называемую объектом. Смысл предложений «описание переменных класса» и «описание объектов класса» один и тот же. Объект – это уже конкретный представитель класса. Объект имеет состояние, поведение и паспорт (средство для его однозначной идентификации); структура и поведение объектов описаны в классах, переменными которых они являются.
Создание классов
Для создания классов предусмотрена инструкция class. Это составная инструкция, которая состоит из строки заголовка и тела. Заголовок состоит из ключевого слова class, имени класса и, возможно, названий суперклассов в скобках. Суперклассов может и не быть, в таком случае скобки не требуются. Тело класса состоит из блока различных инструкций.
class ИМЯКЛАССА:
ПЕРЕМЕННАЯ = ЗНАЧЕНИЕ
…
def ИМЯМЕТОДА(self, ...):
self.ПЕРЕМЕННАЯ = ЗНАЧЕНИЕ
…
…
методы в классах — это те же функции, за одним небольшим исключением. Они принимают один обязательный параметр — self (с англ. можно перевести как "собственная личность"). Он нужен для связи с конкретным объектом. Атрибуты класса — это имена переменных вне функций и имена функций. Эти атрибуты наследуются всеми объектами, созданными на основе данного класса. Атрибуты обеспечивают свойства и поведение объекта. Объекты могут иметь атрибуты, которые создаются в теле метода, если данный метод будет вызван для конкретного объекта.
Создание объектов
ПЕРЕМЕННАЯ = ИМЯКЛАССА()
Здесь скобки обязательны! После такой инструкции в программе появляется объект, доступ к которому можно получить по имени переменной, связанной с ним. При создании объект получает атрибуты его класса, т. е. объекты обладают характеристиками, определенными в их классах. Количество объектов, которые можно создать на основе того или иного класса, не ограничено. Объекты одного класса имеют схожий набор атрибутов, а вот значения атрибутов могут быть разными. Другими словами, объекты одного класса похожи, но индивидуально различимы. Чтобы понять это, можно сравнить отношения объектов одного класса в программировании со следующем высказыванием: "Все млекопитающие принадлежат одному классу и обычно имеют по два глаза, однако у каждого животного (объекта) глаза имеют свои особенности".
Объектная декомпозиция – процесс представления предметной области задачи в виде совокупности объектов, обменивающихся сообщениями.
Черновой план процесса объектной декомпозиции:
Ø Выделить классы и объекты
Ø Определить, что они означают
Ø Выявить связь между классами и объектами
Ø Описать интерфейс и реализацию
Простейший графический редактор
Рисование круга и квадрата
Возможность изменения цвета, размера и координат центра.
Каждый выделяемый объект предметной области отвечает за выполнение некоторых действий, зависящих от полученных сообщений и параметров самого объекта. Совокупность значений параметров объекта называют его состоянием, а совокупность реакций на получаемые сообщения - поведением. Параметры состояния и элементы поведения объектов определяются условием задачи. В процессе решения задачи объект, получив некоторое сообщение, выполняет заранее определенные действия, например, может изменить собственное состояние, выполнить некоторые вычисления, нарисовать окно или график и, в свою очередь, сформировать сообщения другим объектам. Таким образом, процессом решения задачи управляет последовательность сообщений. Передавая эти сообщения от объекта к объекту, программа выполняет необходимые действия.
Статические методы
включаются в код программы при компиляции. Это означает, что до использования программы определено, какая процедура будет вызвана в данной точке. Компилятор определяет, какого типа объект используется при данном вызове, и подставляет метод этого объекта. Объекты разных типов могут иметь одноименные статические методы. В этом случае нужный метод определяется по типу экземпляра объекта. Это удобно, так как одинаковые по смыслу методы разных типов объектов можно и назвать одинаково, а это упрощает понимание и задачи и программы.
Виртуальный метод
в отличие от статических, подключаются к основному коду на этапе выполнения программы. Виртуальные методы дают возможность определить тип и конкретизировать экземпляр объекта в процессе исполнения, а затем вызвать методы этого объекта. Этот принципиально новый механизм, называемый поздним связыванием, обеспечивает полиморфизм, т.е. разный способ поведения для разных, но однородных (в смысле наследования) объектов. Описание виртуального метода отличается от описания обычного метода добавлением после заголовка метода служебного слова virtual .
procedure Method ( список параметров ); virtual;
Абстрагирование — это способ выделить набор значимых характеристик объекта, исключая из рассмотрения не значимые. Соответственно, абстракция — это набор всех таких характеристик. Абстракция данных — популярная и в общем неверно определяемая техника программирования. Фундаментальная идея состоит в разделении несущественных деталей реализации подпрограммы и характеристик существенных для корректного ее использования.
Абстрагирование - процесс выделения абстракций в предметной области задачи. Абстракция - это совокупность существенных характеристик некоторого объекта, которые отличают его от всех других видов объектов и, таким образом, четко определяют особенности данного объекта с точки зрения дальнейшего рассмотрения и анализа. В соответствии с определением применяемая абстракция реального предмета существенно зависит от решаемой задачи: в одном случае нас будет интересовать форма предмета, в другом вес, в третьем - материалы, из которых он сделан, в четвертом – закон движения предмета и т.д. Современный уровень абстракции предполагает объединение всех свойств абстракции (как касающихся состояния анализируемого объекта, так и определяющих его поведение) в единую программную единицу некийабстрактный тип (класс).
Инкапсуляция — свойство языка программирования, позволяющее пользователю не задумываться о сложности реализации используемого программного компонента (что у него внутри?), а взаимодействовать с ним посредством предоставляемого интерфейса (публичных методов и членов), а также объединить и защитить жизненно важные для компонента данные. инкапсуляция, или утаивание информации — это возможность скрыть внутреннее устройство объекта от его пользователей, предоставив через интерфейс доступ только к тем членам объекта, с которыми клиенту разрешается работать напрямую. Инкапсуляция подразумевает наличие границы между внешним интерфейсом класса (открытыми членами, видимыми пользователям класса) и деталями его внутренней реализации. Преимущество инкапсуляции для разработчика в том, что он может открыть те члены класса, которые будут оставаться статичными, или неизменяемыми, скрыв внутреннюю организацию класса, более динамичную и в большей степени подверженную изменениям. Как уже говорилось, в С# инкапсуляция достигается путем назначения каждому члену класса своего модификатора доступа — public, private или protected. Обычно скрывается как структура объекта, таки реализация его методов. Инкапсуляция позволяет легко перестраивать программу, для того чтобы абстракция работала её реализация должна быть инкапсулирована. Каждый класс должен состоять из 2 частей интерфейса и реализации. Интерфейс класса фиксирует лишь внешнее представление объекта, описывающий абстракцию поведения всех объектов данного класса. Реализация класса содержит как представление абстракции, так и механизмы достижения требуемого поведения объектов. Интерфейс класса содерж все предположения , кот клиент сможет сформулировать, относительно объектов класса, а реализация скрывает от других объектов все детали, не имеющее отношение к процессу , т.е всё то что не касается предположений клиента.
Private name
Public walk (то что в скобках реализация) –всё это интерфейс
Ограничение доступа(Инкапсуляция — это принцип, согласно которому любой класс должен рассматриваться как чёрный ящик — пользователь класса должен видеть и использовать только интерфейсную часть класса (т. е. список декларируемых свойств и методов класса) и не вникать в его внутреннюю реализацию. Поэтому данные принято инкапсулировать в классе таким образом, чтобы доступ к ним по чтению или записи осуществлялся не напрямую, а с помощью методов. Принцип инкапсуляции (теоретически) позволяет минимизировать число связей между классами и, соответственно, упростить независимую реализацию и модификацию классов.) Это сокрытие отдельных элементов реализации абстракции, не затрагивающих существенных характеристик ее как целого.
Необходимость ограничения доступа предполагает разграничение двух частей в описании абстракции:
а) интерфейс – совокупность доступных извне элементов реализации абстракции (основные характеристики состояния и поведения);
б) реализация – совокупность недоступных извне элементов реализации абстракции (внутренняя организация абстракции и механизмы реализации ее поведения).
Ограничение доступа в ООП позволяет разработчику:
1) выполнять конструирование системы поэтапно, не отвлекаясь на особенности реализации используемых абстракций;
2) легко модифицировать реализацию отдельных объектов, что в правильно организованной системе не потребует изменения других объектов.
Сочетание объединения всех свойств предмета (составляющих его состояния и поведения) в единую абстракцию и ограничения доступа к реализации этих свойств получило название инкапсуляции.
Инкапсуляция- это процесс разделения эл-ов абстракции, определяющий ее структуру и поведение и предназначенный для изоляции конкретных обязательств абстракции от их реализации.
