Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Otvety_Po_Pi.doc
Скачиваний:
0
Добавлен:
01.03.2025
Размер:
218.11 Кб
Скачать

Объектно-ориентированный подход в программировании

При ООП программа представляет собой описание объектов, их свойств (атрибутов), совокупностей (классов), отношений между ними, способов их взаимодействия и операций над объектами (методов).

В ООП вводится понятие наследование. Механизм наследования атрибутов и методов позволяет строить произвольные понятия на основе базовых и таким образом создавать модель любой сложности области с заданными свойствами.

Обработка событий. Событие – взаимодействие объектов между собой, в результате которых изменяются атрибуты этих объектов.

Наиболее известные объектно-ориентированные языки: С++(поддерживает множественное наследование), 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. При обращении к статическому члену класса, содержащему данный статический конструктор

В обоих случаях сначала вызывается статический конструктор, а потом создается экземпляр класса или выполняется обращение к статическому члену. Сколько бы экземпляров не создавалось, его конструктор вызывается только один раз.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]