- •Программа курса
- •Ооп. Основные понятия
- •Конструкторы, деструкторы и др. Работа с объектами в .Net
- •Ссылочные типы и Типы значения. Передача параметров в .Net
- •Принципы ооп
- •Инкапсуляция
- •Наследование
- •Полиморфизм
- •Важные классы (типы данных)
- •Обобщенные контейнеры
- •Статические методы и свойства
- •Обработка исключений
- •Интерфейсы и слабая связь между классами
- •Рефлексия и создание объектов из внешних модулей по имени класса
Принципы ооп
ООП реализует 3 основных принципа – инкапсуляции, наследования и полиморфизма. Их реализация в различных системах программирования имеет особенности, но в целом, они служат общей цели – повысить эффективность проектирования, разработки и сопровождения информационных систем. Если указанные принципы не находят применения в ваших программах, значит вы не в полной мере пользуетесь преимуществами ООП.
Инкапсуляция
Инкапсуляция включает 2 аспекта – объединение в одном понятии данных и методов работы с ними и сокрытие данных и вспомогательных методов от пользователя.
Описания классов в первой лекции показывают, как происходит объединение данных и методов – классы имеют поля и методы. В тех же примерах появляется слово public. Это слово связано со второй стороной понятия инкапсуляции – сокрытием данных объекта и вспомогательных методов. Кроме public используются слова private и protected.
Public – означает всеобщую доступность. Все (класс, поле данных, свойство или метод) что помечено словом public доступно в любой части программы. Все, что помечено словом private доступно ТОЛЬКО в методах класса. А все что помечено словом protected доступно методам класса и методом классов-потомков, о которых речь пойдет в следующем разделе.
Если у класса, поля данных, метода или свойства не указано ни одного из этих слов, то считается, что указано private.
Оба аспекта инкапсуляции упрощают изучение новых классов и их использование. Имя объект некоторого класса легко узнать какие действия (какие методы) к нему можно применить, какими свойствами он обладает. Современные среды программирования сами подсказывают какие методы доступны программисту, если он напишет имя объекта и поставит точку (признак вызова метода или свойства). Такая возможность возникает именно потому, что и данные и методы работы с ними объединены в одном понятии.
Если разработчик класса не укажет область видимости public ни одному из методов или свойств класса, то пользователь ничего не увидит при подсказке и не сможет вызвать ни свойств ни методов. Поэтому разработчик класса определяет какие из методов и свойств класса предназначены для пользователей класса и отмечает их словом public. Помимо того, что это сокращает количество методов, которые пользователь должен изучить при использовании класса, это еще и оставляет свободу для разработчика класса менять частные методы и поля, не оказывая влияния на код написанный пользователями класса.
Это и есть основное назначение инкапсуляции в ООП.
Наследование
Наследование – способ разработки новых классов на основе уже существующих. При этом, новый класс называется классом потомком или производным классом, а существующий класс – родительским классом, классом предком или базовым классом.
Синтаксически, наследование оформляется так:
public class Limited: Company
{
public List<Person> Constitutors {get; set;}
…
}
Здесь указано, что новый тип компаний Limited (Общество с Ограниченной Ответственностью) является производным от Company. При этом, все методы и свойства, объявленные в классе Company, автоматически присутствуют в классе Limited. Кроме этого, в классе Limited объявлено новое свойство Constitutors (Учредители), которое представляет собой список объектов типа Person.
Таким образом, оказалось, что даже более сложный класс для программиста оказалось разработать проще чем более простой, за счет того, что все что было сделано в базовом классе используется в производном. Это явление получило название ‘повторное использование кода’ и является одним их наиболее существенных следствий ООП.
Другие последствия наследования рассматриваются в следующем разделе. Отметим здесь, что классы в C# образуют древесную иерархию. Если класс предок не указан, то для такого класса базовым является класс Object. В конце концов, оказывается, что все классы в C# являются прямыми или косвенными потомками класса Object.
