15. C-sharp 9 29-10-2013

Created Saturday 23 November 2013

** Везде, где используются литеральные значения (" ", например), следует задуматься
об использовании констант для удобства чтения программы.
** Введение в ООП
*** OOD (Object Oriented Design)
*** OOP (Object Oriented Programming)
**** Module 4 --- READ
**** Появление классов должно быть обосновано
**** Классы как конитейнеры для методов будут всегда
**** Но перед тем, как начать писать программу нужно
найти, какие классы должна содержать программа
**** Процессы поиска классов для написания программы
1) Rational Unified Process (RUP) - требует много знаний, тяжеловесный способ
требует разделение на архитектора и т.д.
2) Agile - в противовес первому менее требовательная методика
1) XP
**** Мы будем учить нечто среднее между этими двумя противоположными подходами
**** Программы на современных языках состоят из классов и ничего меньшего,
чем класс, написать нельзя.
**** После того, как найдены классы, следует найти методы и распределить их
между классами.
**** Классы могут с одной стороны заменять собой структуры без потери функциональности.
Но если есть описание какого-то объекта (например, работника) и в описании
этого объекта чётко присутствуют характеристики статического типа (переменные),
то это абсолютно точно структура. Но класс медленней, чем структура, т.к. структура
хранится в стеке (быстрая память), а класс хранится в виде созданного объекта
и доступ к нему происходит по ссылке (а к структуре по значению).
Часто структуры используют для передачи параметров между методами.
Класс описывает будущие объекты, но при этом снабжая их динамическими
характеристиками.
Например, у работника есть зарплата, но её можно увеличить. Т.е., это характеристика
динамическая, а не статическая.
**** Динамическая характеристика - это метод. То, что объект может делать, или что с
объектом можно делать. (В структуру можно добавить метод, но это неправильно)
**** Структура не поддерживает наследование
**** Структура это облегченный класс, который хранится в стеке и содержит статические
переменные
**** Класс это способ моделирования объектов реального мира, содержащий статические
переменные и динамические методы.
**** Класс это новый тип данных. Вместе с этим в классе можно задать то, что можно
делать с этим типом данных (как, например, арифметические операции на множестве
чисел)
**** Methods, fields, properties, events - то, что содержится в классе
***** fields - variables
***** properties - protected variables
**** Heap - куча - область оперативной памяти, используемая для программы
**** Да, класс это тип данных и контейнер для методов.
Там будут переменные, но: при написании методов мы стараемся, чтобы метод
был с параметрами, а переменные, которыми мы пользуемся, мы объявляем
внутри метода, и, т.о., мы защищаем свои данные.
Когда класс создаётся, по умолчанию доступ к его внутренним переменным
отсутствует. И так должно быть, кроме тех случаев, когда программист
хочет это сделать явно, и в этом случае он объявит это в коде.
**** 1й принцип ООП - инкапсуляция:
Скрытие данных от доступа извне
Модификаторы доступа:
public - открыть доступ
private - закрыть доступ (по умолчанию)
**** И закрытые, и открытые для внешнего доступа переменные - это поля (fields)
**** 1e правило ООП - инкапсуляция. Поэтому ВСЕ ПЕРЕМЕННЫЕ ДОЛЖНЫ БЫТЬ PRIVATE
**** При моделировании всё же программист должен иметь доступ к переменным класа,
но это делается с помощью создания метода, который даёт доступ к этой
переменной:
public bool GetStatus(){
return isOn;
}
**** Метод позволяет написать код, т.е. включить логику (напр. показать переменную
в зависимости от условия)
**** Примеры:
#+BEGIN_SRC C#
// fields
private bool isOn = false;
private string color = "brown";
// property for getting variable value
public bool GetStatus(){
return isOn;
}
// the same property (accessor method) for changing variable
public void SetStatus (bool newStatus){
isOn = newStatus;
}
#+END_SRC
**** Make property
Right click -> Refactoring -> Incapsulate field
** HomeWork:
1) Читать, доделывать дз



Backlinks: