- •Основные положения объектно-ориентированного программирования. Технология объектно-ориентированного программирования: назначение и применение.
- •Основные парадигмы объектно-ориентированного программирования: абстракция.
- •Основные парадигмы объектно-ориентированного программирования: инкапсуляция. Доступ к элементам класса (public, protected, private).
- •Основные парадигмы объектно-ориентированного программирования: полиморфизм.
- •Пространство имен: назначение и применение.
- •Структура класса: члены класса, свойства (элементы), методы, конструкторы и деструкторы, ссылка на себя (this).
- •Управление доступом к членам класса.
- •Конструкторы класса: по умолчанию, с аргументами, копирующие.
- •Перегружаемые методы класса.
- •Статические члены класса: назначение и применение.
- •Константные члены класса: константные свойства, константные методы.
- •Обработка исключений (try/catch/throw-конструкция).
- •Вложенные объекты.
- •Вложенные классы.
- •Принципы преобразования типов.
- •Виртуальные функции.
- •Абстрактные классы.
- •Перегружаемые операторы: бинарные, унарные, префиксные, постфиксные.
- •Спецификация cli. Структура .Net Framework.
- •С#: пространства имен, структура класса, свойства.
Основные положения объектно-ориентированного программирования. Технология объектно-ориентированного программирования: назначение и применение.
Объектно-ориентированное программирование вобрало в себя лучшие идеи струк-
турного программирования и объединило их с новыми концепциями. В результате
появился более совершенный способ организации программы. Если говорить в самых
общих чертах, программу можно организовать одним из двух способов: опираясь либо
на код (т.е. на действия, или на то, что происходит в программе), либо на данные (т.е.
на то, что подвергается определенному воздействию). При использовании исключи-
тельно методов структурного программирования программы обычно организовыва-
лись с опорой на действия. Такой подход можно представить себе в виде кода, воз-
действующего на данные. Объектно-ориентированные программы работают совсем по-другому. Они организованы вокруг данных, а ключевой принцип такой организации гласит: именно дан-
ные должны управлять доступом к коду. В объектно-ориентированном языке про-
граммист определяет данные и код, который разрешен для выполнения действий над
этими данными. Таким образом, тип данных точно определяет операции, которые
могут быть к ним применены.
Для поддержки принципов объектно-ориентированного программирования все
ООП-языки, включая С#, имеют три характерных черты: инкапсуляцию, полимор-
физм и наследование.
Основные парадигмы объектно-ориентированного программирования: абстракция.
Абстракция данных – это подход к обработке данных по принципу «черного ящика», который в нашем случае заключается в том, пользователь не должен задумываться о внутренних свойствах объектов, но должен иметь возможность манипулировать объектами в соответствии с их функциональным предназначением. В идеальном случае используемый пользователем объект должен обладать свойствами похожими на переменные простых встроенных типов С++, таких как, например int и char.
Неявно инкапсуляция уже демонстрировалась в примерах первой главы. Применение модификаторов доступа, статических и константных членов, разделение текста класса на две части (h-файл и cpp-файл) – все это позволяет создавать объекты обладающие таким свойством.
Основные парадигмы объектно-ориентированного программирования: инкапсуляция. Доступ к элементам класса (public, protected, private).
Инкапсуляция (encapsulation) - свойство языка программирования, позволяющее объединить данные и код и скрыть реализацию объекта от пользователя. Пользователю предоставляется только интерфейс класса, с помощью которого он может взаимодействовать с объектом.
Инкапсуляция — это механизм программирования, который связывает код (дейст-
вия) и данные, которыми он манипулирует, и при этом предохраняет их от вмеша-
тельства извне и неправильного использования. В объектно-ориентированном языке
код и данные можно связать таким образом, что будет создан автономный черный
ящик. Внутри этого ящика находятся все необходимые данные и код. При таком свя-
зывании кода и данных создается объект. Другими словами, объект — это элемент,
который поддерживает инкапсуляцию. Сокрытие деталей реализации класса обусловлено главным образом тем, что при разработке классов заранее предполагается, что их реализация будет в дальнейшем претерпевать изменения, которые могут вынудить пользователей переписывать код своих программ. В хорошо инкапсулированном классе интерфейс практически не зависит от реализации, поэтому изменение реализации не потребует изменения пользовательских программ или сведет это процесс к минимуму.
Код, данные или обе эти составляющие объекта могут быть закрытыми внутри
него или открытыми. Закрытый код или закрытые данные известны лишь остальной
части этого объекта и доступны только ей. Это означает, что к закрытому коду или
данным не может получить доступ никакая другая часть программы, существующая
вне этого объекта. Если код или данные являются открытыми, к ним (несмотря на то,
что они определены внутри объекта) могут получить доступ другие части программы.
Как правило, открытые части объекта используются для обеспечения управляемого
интерфейса с закрытыми элементами.
Основной единицей инкапсуляции в С# является класс. Класс определяет форму
объекта. Он задает как данные, так и код, который будет оперировать этими данными.
В С# класс используется для создания объектов. Объекты — это экземпляры класса.
Таким образом, класс — это по сути набор шаблонных элементов, которые показыва-
ют, как построить объект.
Код и данные, которые составляют класс, называются членами класса. Данные, оп-
ределенные в классе, называются переменными экземпляра (instance variable), а код, ко-
торый оперирует этими данными, — методами-членами (member method), или просто
методами.
Модификатор public указывает на то, что элементы объекта будут доступны для использования, как в методах самого объекта, так и во внешнем, по отношению к объекту коде программы.
Модификатор private устанавливается по умолчанию и указывает на то, что элементы объекта будут доступны только методам самого объекта и недоступны внешнему по отношению к объекту коду.
Действие модификатора protected похоже на действие модификатора private, но возможность доступа к свойствам и методам объекта подчиненных этому модификатору, распространяется на методы производных объектов.
Основные парадигмы объектно-ориентированного программирования: наследование. Принципы проектирования классов с наследованием. Множественное наследование (для С++).
Наследование — это процесс, благодаря которому один объект может приобретать
свойства другого. Благодаря наследованию поддерживается концепция иерархической
классификации. В виде управляемой иерархической (нисходящей) классификации
организуется большинство областей знаний. Если не использовать иерархическое представление признаков, для каждого объек-
та пришлось бы в явной форме определить все присущие ему характеристики. Но
благодаря наследованию объекту нужно доопределить только те качества, которые де-
лают его уникальным внутри его класса, поскольку он (объект) наследует общие атри-
буты своего родителя. Следовательно, именно механизм наследования позволяет од-
ному объекту представлять конкретный экземпляр более общего класса. В языке С# класс, который наследуется, называется базовым. Класс, который на-
следует базовый класс, называется производным. Следовательно, производный класс —
это специализированная версия базового класса. В производный класс, наследующий
все переменные, методы, свойства, операторы и индексаторы, определенные в базо-
вом классе, могут быть добавлены уникальные элементы. Общая форма объявления класса, который наследует базовый класс, имеет такой вид:
class имя__производного_класса : имя_базового_класса {
// тело класса}
Для создаваемого производного класса можно указать только один базовый класс.
В С# (в отличие от C++) не поддерживается наследование нескольких базовых клас-
сов в одном производном классе. несмотря на то, что производный класс включает все члены базового класса, он
не может получить доступ к тем из них, которые объявлены закрытыми.