среда, 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 - говори, что данный метод (свойство, событие) было объявлено раньше (в родительских классах), а сейчас переписывается.
На этом месте мне стало откровенно лень пихать много всего в один пост. Но про полиморфизм можно еще рассказывать и рассказывать. Так же и примеру будут чуть позже.
Всем спасибо, всем пока!)
От критики и комментариев не откажусь.
И еще. Как-то сильно полетела верстка... Прошу простить, тут черт ногу сломит)

воскресенье, 10 июня 2012 г.

А давайте напишем план

Итак, блог создан - пол дела сделано. Но пока еще неизвестно даже примерно, что будет в этом блоге.
Осмелюсь на первое время взять план из одной компании. Это, конечно, не мое мнение, а мнение людей из .Net отдела "компании" (этика не позволяет мне назвать ее), но я считаюсь с этим мнением. Кстати, примеры и другие материалы с использованием кода буду приводить на языке C#.
  1. Чёткое понимание ООП, ООА и шаблонов проектирования. Поскольку все языки программирования, применяемые в разработках на .NET Framework являются объектно-ориентированными, каждый .NET разработчик должен иметь ясное представление о принципах объектно-ориентированного программирования и анализа, а также уметь применять их на практике с учѐтом возможностей языков .NET.
    • Понимание основополагающих принципов ООП: абстракции, наследования, инкапсуляции и полиморфизма. Умение использовать эти принципы в языках программирования .NET
    • Умение применять объектно-ориентированный анализ при проектировании частей приложений, и, как следствие, умение писать максимально эффективный ОО код
    • Умение разрабатывать приложения с применением шаблонов проектирования
  2. Понимание принципов работы CLR и .NET Framework. Все .NET приложения выполняются под управлением общеязыковой среды выполнения (CLR – Common Language Runtime). Понимание основных принципов работы CLR и .NET Framework имеет большое значение при разработке .NET приложений.
    • Архитектура .NET Framework
    • Работа со сборками
    • Работа с типами и управление ими
    • Понимание процесса сбора мусора и работы сборщика мусора (GC – Garbage Collector)
    • Назначение доменов приложений
    • Умение работать с отражениями (reflection)
  3. Умение программировать на C#. Основным языком разработки приложений на .NET Framework является C#. По этой причине .NET разработчик должен хорошо владеть приѐмами программирования на C#.
    • Умение проектировать классы и структуры, а также умение работать с объектами
    • Умение работать с коллекциями
    • Основы многопоточного программирования
    • Умение работать с делегатами
    • Работа с отражениями
    • Работа с сериализацией и сериализуемыми объектами
    • Применение модели освобождения ресурсов
    • Базовое представление о возможностях C# 2.0: generic-типы, nullable-типы, итераторы, анонимные методы
    • Базовые знания о Framework 3.5: automatic properties, object initializes, anonymous types, extension methods, lambdas, partial methods and LINQ (Language Integrated Query)
  4. Работа с базами данных с применением существующей ORM системы. В данный момент существует достаточно большое количество подобных систем, которые облегчают процесс разработки приложений при работе с базами данных. Это такие системы как: NHibernate, Entity framework и Linq to SQL.
    • Работа с соединением и подключение к проекту
    • Разработка маппингов
    • Работа со связанными сущностями
    • Построение простейших и «кастомных» запросов к БД, используя встроенные возможности системы
    • Выполнение CRUD операций
    • Умение работать с хранимыми процедурами
  5. Разработка Web-приложений на ASP.NET. Благодаря ASP.NET разработка Web-приложений превратилась из рутинного программирования в творческий процесс. Умение работать с ASP.NET позволяет создавать Internet-приложения за рекордные сроки. 
    • Работа с Web-формами
    • Понимание жизненного цикла страниц ASP.NET
    • Серверные элементы управления
    • Работа с объектами Session, Cache, Application, ViewState, Cookies
    • Работа с классом ASP.NET-приложения – Global.asax
    • Конфигурирование приложений ASP.NET, файл web.config
    • Объекты отображения данных: GridView, DataList, Repeater
    • Работа с веб-сервисами
    • Обязательное знание трёхуровневой архитектуры проектирования
    • Работа с JavaScript (работа с DOM, асинхронное взаимодействие с сервером)
    • Работа с CSS (оформление страницы, размещение элементов)
  6. Разработка Web-приложений на ASP.NET MVC. ASP.NET MVC является свободным, полностью поддерживаемым Microsoft продуктом, который позволяет разработчикам легко создавать большие веб-приложения. Он обеспечивает полный контроль над вашим HTML и URLs, дает богатые возможности интеграции AJAX, а также облегчает Test Driven Development.
    • Понимание паттерна model-view-controller
    • Понимание процесса выполнения приложения
    • Работа с ASP.NET MVC Routing
    • Работа с Controllers и Actions
    • Работа с представлениями (умение разрабатывать различные представления на основе готовых решений и создание собственных)
    • Работа с моделью приложения на основе существующей ORM
    • Работа с ASP.NET MVC Validation
    • Работа с Master Page
    • Работа с кэшем
    • Работа с разными способами аутентификации пользователей
  7. Тестирование приложений. Умение автоматически тестировать собственные приложения является важным аспектом разработки программ и повышает уровень кода, а также качество продукта в целом. Юнит тестирование позволяет программисту не только проводить рефакторинг кода, будучи уверенным, что модуль по прежнему работает корректно, но и изолировать отдельные части программы и показать, что по отдельности они работоспособны. Правильно написанные тесты могут выступать в качестве документации, глядя на которую, легко можно понять требования к тестируемой системе.
    • Понимание разработки в стиле TDD
    • Работа с NUnit framework
    • Понимание “Fake” объектов и умение их применять
На первое время этого небольшого плана хватит ;) Честно сказать, я сам в некоторых темах плаваю, но будем разбираться вместе.
Если у кого есть предложение по изменению, дополнению плана - выслушаю ваши предложения. Контакты приведены в профиле.

Зачем этот блог?

Добрый день, уважаемые читатели.
Я этот блог создал давно. И так же давно сюда не заходил, но сейчас я буду исправляться.

Цель данного сайта очень проста. Я хочу сам разобраться, и показать многим, кто не знает, в темах, которые нужны для программирования на технологии .Net. Да, у меня нет почти опыта. Да, я, в большинстве своем, самоучка. Но надеюсь, что данные статьи помогут и вам и мне разобраться в том, а что же нужно знать, чтобы успешно программировать и, возможно, работать в данной области.
Скажу честно. Так как я сам не "гуру-программист", а всего лишь Junior Developer, я знаю не очень много. Поэтому приемлю любую критику и помощь (в пределах приличия, конечно).

Спасибо за внимание. И спасибо, что зашли на мой блог.

С уважением, Александр Шевцов.