
Объектно-ориентированный подход в программировании
При ООП программа представляет собой описание объектов, их свойств (атрибутов), совокупностей (классов), отношений между ними, способов их взаимодействия и операций над объектами (методов).
В ООП вводится понятие наследование. Механизм наследования атрибутов и методов позволяет строить произвольные понятия на основе базовых и таким образом создавать модель любой сложности области с заданными свойствами.
Обработка событий. Событие – взаимодействие объектов между собой, в результате которых изменяются атрибуты этих объектов.
Наиболее известные объектно-ориентированные языки: С++(поддерживает множественное наследование), Visual Basic, Java и т.д.
Использование ООП позволяет многократно использовать созданный код, удобно его адаптировать под конкретные задачи.
9
Класс — разновидность абстрактного типа данных в объектно-ориентированном программировании (ООП), характеризуемый способом своего построения. Суть отличия классов от других абстрактных типов данных состоит в том, что при задании типа данных класс определяет одновременно и интерфейс, и реализацию для всех своих экземпляров, а вызов метода-конструктора обязателен. При использовании классов все элементы кода программы, такие как переменные, константы, методы, процедуры и функции, могут принадлежать (а во многих языках обязаны принадлежать) тому или иному классу. Сам класс в итоге определяется как список своих членов, а именно полей (свойств) и методов/функций/процедур.
Члены класса включают все члены, объявленные в этом классе, а также все члены (кроме конструкторов и деструкторов), объявленные во всех классах в иерархии наследования данного класса. Закрытые члены в базовых классах наследуются, но недоступны из производных классов.
Члены класса : поля, константы, свойства, методы, события, операторы, индексаторы, конструкторы, деструкторы.
Классы в языке C# определяются следующим образом:
public class MyClass
{
//Член, доступный любому классу программы
public int k;
//Член, доступный любому классу в том же модуле программы
internal int l;
//Член, доступный любому классу в том же модуле программы либо только текущему классу и всем его подклассам в другом модуле
protected internal int m;
//Член, доступный только текущему классу и всем его подклассам
protected int n;
//Член, доступный только из текущего класса (по умолчанию).
private int p;
}
public void DoSomething();
{
var person = new
{
Name = "Маргарита",
Age = 15
};
var pet = new
{
Name = "Дуня",
Type = "Черепаха",
Owner = person
};
Console.WriteLine("Age of pet owner: " + pet.Owner.Age);
}
10
Наследование – свойство того или иного объекта сохранять поведение (атрибуты и операции над ними) от родительского объекта. Родительский объект называется базовым классом, а дочерний – производным классом. Конструкторы классов не наследуются. В ООП имеется возможность замещать наследуемые методы другими словами. Механизм перегрузки. Инкапсуляция – возможность доступа к объекту и манипулирование им исключительно посредством предоставления именно этим объектом свойств и методов. При инкапсуляции важным становится понятие области видимости, которая указывает уровень доступности класса, метода, свойства. Основные свойства: 1. Совместное хранение данных и функций внутри объекта 2. Сокрытие внутренней информации от пользователя 3. Изоляция пользователя от особенностей реализации Полиморфизм – возможность оперировать объектами не обладая точным знанием их типов.(или наличие функций в объектах, с возможностью обработки данных переменного типа.) Void WriteValue(object o)
{
Console.Write(o.ToString());
}
11
Метод – предоставляемая объектом функциональная возможность. Методы выполняют сложные действия над самим объектом, обращаются к его полям, изменяют состояние объекта. Конструктор – частный случай метода, для которого ничего не указывается.
Жизненный цикл объекта
Каждый объект имеет свой жизненный цикл. Жизненный цикл можно представить в виде трех этапов:
1. Построение – при создании экземпляра объекта, его необходимо инициализировать. Этот процесс называется построением и выполняется с помощью метода – конструктора
2. Использование объекта – вызываются его методы, назначаются значения полям через свойства, объект реагирует на события и т.д.
3. Уничтожение – для уничтожения объекта может быть специальный метод, называемый деструктором.
События
Объекты при работе могут генерировать и обрабатывать события (event’ы).События важны тем, что позволяют выполнять определенные действия в других частях кода.
Например, при добавлении объекта Animal в коллекцию Animals, может понадобиться выполнить определенный код, не являющийся ни частью кода Animals, ни частью того кода, который вызывает метод Add. Для этого необходимо добавить в код обработчик события – особую функцию, которая вызывается при возникновении события. Нужно настроить этот обработчик, чтобы он ожидал возникновения этого события.
class A
{
selectEvent;
}
class B
{
SelectEvent
{
...
}
}
С помощью событий можно создавать управляемые событиями приложения, которые гораздо более гибки в использовании, например все Windows приложения полностью зависят от событий.
12
Свойства и поля объектов Обеспечивают доступ к содержащимся в объекте данным.
Данные, которые находятся в свойствах и полях образуют состояние этого объекта.
Поля и свойства имеют типы тех данных, которые описывают состояние объекта. Свойство отличается от поля тем, что они не предоставляют непосредственный доступ к данным, а взаимодействуют с данными, как правило, через поля. В поле для хранения информации о количестве кусочков сахара могут помещаться любые значения, ограниченные только типом этих данных.
Предположим в классе CuoOfCofee есть код, в котором описывается, какое количество кусочков сахара может быть в чашке кофе. Этот код управляется через специальное поле типа int (-2*10^9; 2*10^9). Очевидно, что не все эти значения будут иметь смысл и поэтому необходимо их благоразумно ограничить. В общем случае для доступа к состоянию (например, количество сахара) используются свойства, в ходе которых можно указывать ограничение и обработку значений, которые затем присваиваются полям. В свойствах можно указывать модификаторы доступа (public, private), тип доступа к данным (для чтения и/или записи).
Public class CupOfCofee
{
Int m_Sugar;
Public int Sugar
{
get
{
return m_Sugar;
}
set
{
if ((Value >=0)&&(Value <=5) m_Sugar = Value;
}
}
Public bool addSugar (int a)
{
int diff = 5 - m_Sugar;
if ((a<=diff)&&(a>0)
{
m_Sugar+=a;
return true;
}
Else return false;
}
}
CupOfCofee cup = new CupOfCofee();
cup.Sugar = 3;
int s = cup.Sugar;
Пусть кроме того класс CupOfCofee имеет свойство только для чтения Описание, в этом свойстве собирается вся информация об отдельно взятой чашке кофе. Все многообразие общедоступных членов класса (public) называется представлением класса.
Статические члены класса
Статические свойства и поля позволяют обращаться к данным, которые не зависят не от каких экземпляров класса, а статические методы – выполнять код, связанный с типом класса…кроме того для использования статических членов нет необходимости нет необходимости создавать экземпляры класса.
class A
{
public static int Count;
public int Number;
}
A myclass = new A();
int myclass = A.Count;
int mynumber = myclass.Number;
В UML статические члены обозначаются подчеркиванием.
Статические конструкторы
Для применения статических членов может понадобиться их инициализация. Для этого существуют статические конструкторы. У класса могут быть один статический конструктор, который не может принимать никаких параметров. Он вызывается в следующих случаях:
1. При создании экземпляра класса, содержащего данный статический конструктор
2. При обращении к статическому члену класса, содержащему данный статический конструктор
В обоих случаях сначала вызывается статический конструктор, а потом создается экземпляр класса или выполняется обращение к статическому члену. Сколько бы экземпляров не создавалось, его конструктор вызывается только один раз.