Глава 1. ООП. ООА. Шаблоны проектирования.
1. ООП. Понимание и использование.
Не долго думая, я решил сразу написать первую статью. И, следуя плану, который я наметил чуть ранее, первой темой стало ООП. Лично мое мнение - люблю эту тему. Я ее понимаю, люблю использовать, было много интереных моментов с ней (особенно с примерами).
В общем
Принципы ООП (Объектно-ориентированного программирования) позволяют программистам писать "хороший" код. "Хороший" - в смысле легкий в написании и понимании, который позволяет легко и без последствий модифицировать его при необходимости. Базовые концепции ООП, при правильном их использовании, позволяют сделать легкий и эффективный код.
Концепций ООП всего три (некоторые выделяют четвертую - абстракцию, но я считаю, что это часть полиморфизма):
Концепций ООП всего три (некоторые выделяют четвертую - абстракцию, но я считаю, что это часть полиморфизма):
- Инкапсуляция.
- Наследование.
- Полиморфизм.
Поговорим отдельно о каждой.
Инкапсуляция
Данная концепция позволяет ограничить для использования ваш код другим программистам. Предположим вам нужно написать библиотеку классов, в которой два класса. Но один вам требуется только для личных целей, а второй вы предоставляете на использование на внешний уровень, людям, которые будут использовать вашу библиотеку.
Для этой цели перед объявлением класса, поля, свойства или методов пишуться модификаторы доступа:
- private - доступ к типу или элементу возможен только коду внутри текущего класса или структуры.
- internal - доступ возможен только внутри текущей сборки, но не из внешних сборок.
- protected - доступ возможен внутри текущего класса или сборки, а так же внутри классов, которые наслудеют текущий.
- public - доступ возможен внутри текущей сборки, или сборки, которая ссылается на текущую.
- protected internal - доступ возможен внутри текущей сборки или внутри классов, которые наследуют данный в других сборках.
// public class:
public class Tricycle
{
// protected method:
protected void Pedal() { }
// private field:
private int wheels = 3;
// protected internal property:
protected internal int Wheels
{
get { return wheels; }
}
}
В принципе по инкапсуляции все.Наследование
Возможность наследовать классы позволяет в производном классе (классе-потомке) использовать те же элементы (поля, методы, и др.) что и в классе-предке. Пример конструкции: Есть класс:public class Parent { public void WriteText() { Console.WriteLise("SomeText"); } } Есть производный класс:public class Child : Parent { } Это позволяет использовать метод WriteText через объект класса Child.Полиморфизм
Сложная, но интересна концепция. Она позволяет классам с одинаковой спецификацией выполнять различные функции.Есть классы: public class Parent { public virtual void WriteText() { Console.WriteLine("Parent.WriteText"); }} public class Child1 : Parent { public override void WriteText() { Console.WriteLine("Child1.WriteText"); } } public class Child2 : Parent { public override void WriteText() { Console.WriteLine("Child2.WriteText"); } }Как видите здесь мы использовали слова virtual и override.
--------
Вот на этом моменте я остановился примерно пол года назад. Немного удивился своей первой фразе, но решил ничего не менять и продолжить с того же места.
--------
Итак появились модификаторы методов, которые так похожи на модификаторы в инкапсуляции. Вот честно, я уже не помню все эти точные названия. Если хотите - напомните мне. virtual - модификатор, который обозначает что данный метод (свойство, событие) можно переопределить в дочерних классах. А соответственно override - говори, что данный метод (свойство, событие) было объявлено раньше (в родительских классах), а сейчас переписывается.
На этом месте мне стало откровенно лень пихать много всего в один пост. Но про полиморфизм можно еще рассказывать и рассказывать. Так же и примеру будут чуть позже.
Всем спасибо, всем пока!)
От критики и комментариев не откажусь.
И еще. Как-то сильно полетела верстка... Прошу простить, тут черт ногу сломит)