
- •Лекция №1-2 Тема: Объектно-ориентированный подход в программировании
- •Абстрагирование
- •Инкапсуляция
- •Наследование
- •Жизненный цикл
- •Атрибуты класса
- •Операции класса
- •Описание классов с помощью c#
- •Internal (внутренний) – компонент доступен только из классов, принадлежащих сборке, в которой определен данный класс (в том числе и самому классу).
- •Способы достижения инкапсуляции в c#
- •Конструкторы классов
Лекция №1-2 Тема: Объектно-ориентированный подход в программировании
ОО-подход исторически пришел на смену функциональному подходу, когда программа разбивалась на отдельные фрагменты – функции, которые получали исходные данные, в соответствии со своей логикой обрабатывали их и возвращали результат (как значении функции либо по ссылке через параметры).
На любом этапе данные могли быть изменены, что привело бы к логической ошибке даже при правильн ом описании логики каждой функции в отдельности. Безусловно, было разработано множество способов сокращения такого рода ошибок, однако это приводило к дополнительным накладным расходам.
Еще один недостаток функционального подхода – концептуальное несоответствие предметной области. Сложно представить почему, например, эти 50 функций и 30 переменных, возможно описанные в разных файлах, представляют собой модель башенного крана.
При объектно-ориентированном подходе программа представляет собой описание объектов, их свойств (или атрибутов), классов (или совокупностей), отношений между ними, способов их взаимодействия и операций над объектами (или методов).
К наиболее важным инструментальным средствам ООП относятся:
• абстрагирование;
• инкапсуляция;
• наследование;
• полиморфизм;
Понятие объекта известно нам из реального мира. Там под объектом подразумевается некий предмет, характеризующийся концептуальной целостностью. В программировании под объектом может подразумеваться также и некий процесс.
Абстрагирование
Абстрагирование – это процесс выделения групп объектов (процессов) реального мира. Абстрагирование может быть различной степени, которая определяется классом решаемых задач и требуемой степенью детализации.
Например, если поставлена задача составить расписание занятий, то объектами будут учебные аудитории и группы студентов. Если поставлена задача размещения участников конференции, то детализация будет выше (объектами станут, предположим, свободные места в аудитории и непосредственно участники) и т.д.
В процессе выделения объектов реального мира оказывается, что некоторые группы объектов характеризуются одними и теми же свойствами, могут выполнять одни и те же действия.
Например, у любого объекта «ручка» есть свойство «цвет» и «толщина линии». Независимо от того, какие значения принимают эти свойства, любой объект «ручка» может выполнить действие «провести линию». Такие группы называются классами объектов.
С точки зрения объектно-ориентированного программирования, класс – это определенный пользователем тип, а объект – это экземпляр какого-либо класса.
Здесь можно провести аналогию с переменными C/С++.
Есть тип данных, например int. Можно объявить несколько переменных данного типа
inti1, i2, i3;
и каждой из них присвоить некоторое значение
i1 = 3; i2 = 7; i3 = i2 + i1;
Инкапсуляция
Под инкапсуляцией понимается скрытие данных объекта от внешних подпрограмм. При этом доступ к ним осуществляется через открытый интерфейс класса. Реализация самих методов также инкапсулирована (это наблюдалось еще в функциональном подходе, каждая функция представляет собой, по сути, «черный ящик» - мы знаем какие данные требуется передать вфункция, мы ожидаем определенного результата на основе этих данных, но мы не знаем, как этот результат получен).
Здесь можно дать еще одно определение объекта как объединения закрытого набора данных и открытого набора методов (интерфейса) для работы с этими данными. Позже мы рассмотрим такое развитие идеи инкапсуляции, как свойства объекта.
Правильная инкапсуляция позволяет сохранять данные объекта в непротиворечивом состоянии. Позволяет избежать множества логических ошибок, дает возможность изменять реализацию методов класса без внесения изменений в общую логику программы. Исключается возможность несанкционированного взаимодействия объекта с другими частями программы.