Объектно-ориентированное программирование (далее ООП) считается одним из самых современных и совершенных подходов в этой области. Существовавшие до него процедурный и функциональный методы предполагали написание кода в одном файле. С развитием технологий программы становились все длиннее и длиннее, и разработчикам становилось сложнее поддерживать и изменять их. ООП решает эту проблему, разделяя кусок кода на отдельные сущности, называемые классами и объектами.
Классы и объекты — в чем отличие?
ООП внес в программирование никогда не существовавшие определения: класс и объект. Класс можно назвать типом данных, или — проще говоря — куском кода, имеющим характеристики, называемые полями класса и возможные действия — методы класса. Объект — это сущность, имеющая определенные свойства, принадлежит некоторому классу.
Пример
Одним из самых распространенных и понятных примеров является аналогия с животными. У абстрактного животного есть определенные свойства (окрас, вид, масса и т.д.) — для его описания используется класс. Конкретные животные (слон, черепаха) будут уже объектами этого класса.
Три главных принципа ООП
Существуют три главных понятия, называемых также «тремя китами ООП», без которых сама его концепция невозможна - инкапсуляция, наследование и полиморфизм. Без понимания работы этих основных принципов продвигаться дальше в изучении ООП сложно. Давайте коротко рассмотрим каждое из них.
- Инкапсуляция — принцип, позволяющий скрыть от пользователя реализацию некоторых методов и значения полей. В языке программирования C# для этого используются так называемые модификаторы доступа (public, private и т.д.).
- Наследование — принцип, позволяющий создать один класс на основе другого. Первый класс называется наследником, а второй – родителем. В классе-наследнике реализуются все методы и поля класса-родителя.
- Полиморфизм — принцип, позволяющий объектам с идентичным интерфейсом иметь различную реализацию. Полиморфизм добавляет несколько новых понятий: абстрактный/виртуальный метод и переопределение метода.
- Абстрактный метод — метод, который должен быть реализован в классе-наследнике и не должен — в классе-родителе.
- Виртуальный метод — метод, который может быть переопределен в классе-наследнике и может иметь (а может и не иметь) реализацию в классе-родителе.
Переопределение метода — изменение реализации виртуального метода.