среда, 2 января 2013 г.

1.1 Три кита ООП. Часть 1. Начало.


Глава 1. ООП. ООА. Шаблоны проектирования.

1. ООП. Понимание и использование.

Не долго думая, я решил сразу написать первую статью. И, следуя плану, который я наметил чуть ранее, первой темой стало ООП. Лично мое мнение - люблю эту тему. Я ее понимаю, люблю использовать, было много интереных моментов с ней (особенно с примерами).

В общем

Принципы ООП (Объектно-ориентированного программирования) позволяют программистам писать "хороший" код. "Хороший" - в смысле легкий в написании и понимании, который позволяет легко и без последствий модифицировать его при необходимости. Базовые концепции ООП, при правильном их использовании, позволяют сделать легкий и эффективный код.
Концепций ООП всего три (некоторые выделяют четвертую - абстракцию, но я считаю, что это часть полиморфизма):
  1. Инкапсуляция.
  2. Наследование.
  3. Полиморфизм.
Все эти концепции, и их применение, очень легко показать на классах. 

Поговорим отдельно о каждой.

 Инкапсуляция

Данная концепция позволяет ограничить для использования ваш код другим программистам. Предположим вам нужно написать библиотеку классов, в которой два класса. Но один вам требуется только для личных целей, а второй вы предоставляете на использование на внешний уровень, людям, которые будут использовать вашу библиотеку.
Для этой цели перед объявлением класса, поля, свойства или методов пишуться модификаторы доступа:
  1. private - доступ к типу или элементу возможен только коду внутри текущего класса или структуры.
  2. internal - доступ возможен только внутри текущей сборки, но не из внешних сборок.
  3. protected - доступ возможен внутри текущего класса или сборки, а так же внутри классов, которые наслудеют текущий.
  4. public - доступ возможен внутри текущей сборки, или сборки, которая ссылается на текущую.
  5. 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 - говори, что данный метод (свойство, событие) было объявлено раньше (в родительских классах), а сейчас переписывается.
На этом месте мне стало откровенно лень пихать много всего в один пост. Но про полиморфизм можно еще рассказывать и рассказывать. Так же и примеру будут чуть позже.
Всем спасибо, всем пока!)
От критики и комментариев не откажусь.
И еще. Как-то сильно полетела верстка... Прошу простить, тут черт ногу сломит)