Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Otvety_OOP.docx
Скачиваний:
4
Добавлен:
21.09.2019
Размер:
59.42 Кб
Скачать
  1. Основные положения объектно-ориентированного программирования. Технология объектно-ориентированного программирования: назначение и применение.

Объектно-ориентированное программирование вобрало в себя лучшие идеи струк-

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

появился более совершенный способ организации программы. Если говорить в самых

общих чертах, программу можно организовать одним из двух способов: опираясь либо

на код (т.е. на действия, или на то, что происходит в программе), либо на данные (т.е.

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

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

лись с опорой на действия. Такой подход можно представить себе в виде кода, воз-

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

ные должны управлять доступом к коду. В объектно-ориентированном языке про-

граммист определяет данные и код, который разрешен для выполнения действий над

этими данными. Таким образом, тип данных точно определяет операции, которые

могут быть к ним применены.

Для поддержки принципов объектно-ориентированного программирования все

ООП-языки, включая С#, имеют три характерных черты: инкапсуляцию, полимор-

физм и наследование.

  1. Основные парадигмы объектно-ориентированного программирования: абстракция.

Абстракция данных – это подход к обработке данных по принципу «черного ящика», который в нашем случае заключается в том, пользователь не должен задумываться о внутренних свойствах объектов, но должен иметь возможность манипулировать объектами в соответствии с их функциональным предназначением. В идеальном случае используемый пользователем объект должен обладать свойствами похожими на переменные простых встроенных типов С++, таких как, например int и char.

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

  1. Основные парадигмы объектно-ориентированного программирования: инкапсуляция. Доступ к элементам класса (public, protected, private).

Инкапсуляция (encapsulation) - свойство языка программирования, позволяющее объединить данные и код и скрыть реализацию объекта от пользователя. Пользователю предоставляется только интерфейс класса, с помощью которого он может взаимодействовать с объектом.

Инкапсуляция — это механизм программирования, который связывает код (дейст-

вия) и данные, которыми он манипулирует, и при этом предохраняет их от вмеша-

тельства извне и неправильного использования. В объектно-ориентированном языке

код и данные можно связать таким образом, что будет создан автономный черный

ящик. Внутри этого ящика находятся все необходимые данные и код. При таком свя-

зывании кода и данных создается объект. Другими словами, объект — это элемент,

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

Код, данные или обе эти составляющие объекта могут быть закрытыми внутри

него или открытыми. Закрытый код или закрытые данные известны лишь остальной

части этого объекта и доступны только ей. Это означает, что к закрытому коду или

данным не может получить доступ никакая другая часть программы, существующая

вне этого объекта. Если код или данные являются открытыми, к ним (несмотря на то,

что они определены внутри объекта) могут получить доступ другие части программы.

Как правило, открытые части объекта используются для обеспечения управляемого

интерфейса с закрытыми элементами.

Основной единицей инкапсуляции в С# является класс. Класс определяет форму

объекта. Он задает как данные, так и код, который будет оперировать этими данными.

В С# класс используется для создания объектов. Объекты — это экземпляры класса.

Таким образом, класс — это по сути набор шаблонных элементов, которые показыва-

ют, как построить объект.

Код и данные, которые составляют класс, называются членами класса. Данные, оп-

ределенные в классе, называются переменными экземпляра (instance variable), а код, ко-

торый оперирует этими данными, — методами-членами (member method), или просто

методами.

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

Модификатор private устанавливается по умолчанию и указывает на то, что элементы объекта будут доступны только методам самого объекта и недоступны внешнему по отношению к объекту коду.

Действие модификатора protected похоже на действие модификатора private, но возможность доступа к свойствам и методам объекта подчиненных этому модификатору, распространяется на методы производных объектов.

  1. Основные парадигмы объектно-ориентированного программирования: наследование. Принципы проектирования классов с наследованием. Множественное наследование (для С++).

Наследование — это процесс, благодаря которому один объект может приобретать

свойства другого. Благодаря наследованию поддерживается концепция иерархической

классификации. В виде управляемой иерархической (нисходящей) классификации

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

та пришлось бы в явной форме определить все присущие ему характеристики. Но

благодаря наследованию объекту нужно доопределить только те качества, которые де-

лают его уникальным внутри его класса, поскольку он (объект) наследует общие атри-

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

ному объекту представлять конкретный экземпляр более общего класса. В языке С# класс, который наследуется, называется базовым. Класс, который на-

следует базовый класс, называется производным. Следовательно, производный класс —

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

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

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

class имя__производного_класса : имя_базового_класса {

// тело класса}

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

В С# (в отличие от C++) не поддерживается наследование нескольких базовых клас-

сов в одном производном классе. несмотря на то, что производный класс включает все члены базового класса, он

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

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