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

Вопрос 14) Свойства и методы в ооп

Свойства в ООП.

Свойства служат для организации доступа к полям класса. Как правило, свойство связанно с закрытым полем класса и определяет его получение и установку.

Пример С#

Class counter

{

Private int count;

Public counter()

{

Count = 0;

}

Public counter(int c)

{

Count = c;

}

Public int Count

{

Get { return counter;}

Set{counter = value;}

}

}

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

Значение спецификаторов для свойств аналогичны обычным спицификаторам доступа (public,prvate,protected). Чаще всего поля делают публичными ( public).

Код доступа предстовляет собой блоки операторов, которые выполняются при получении (get) или при установки (set) . Также свойство может быть доступно только для записи или только для чтение следовательно один из блоков будет просто отсутствовать пример:

Class counter

{

Private int count;

Public counter()

{

Count = 0;

}

Public counter(int c)

{

Count = c;

}

Public int Count

{

Get { return counter;}

}

}

Здесь после создания экземпляра класса мы уже не сможем установить значение свойству COUNT, оно доступно только для чтения.

Вопрос 15) События и методы в ооп События

События – это процедуры, которые выполняются всякий раз, когда это событие происходит. Например, событие OnChange компонента Edit происходит всякий раз, когда меняется текст в поле ввода. События находятся на вкладке Events Инспектора объектов. Если мы ничего не создадим, то при наступлении этого события ничего и не произойдет. Однако, если мы дважды щелкнем мышью по этому событию – создастся процедура обработки этого события. И тот программный код, который мы введем, будет выполняться всякий раз, когда это событие происходит.

Событие OnChange применяют довольно часто, когда нужно проверить правильные ли данные вводит пользователь. Хорошая новость – большинство событий (а также свойств и методов), у большинства компонентов одинаковы. Например, практически любой компонент для ввода пользователем текста имеет событие OnChange. Применяете ли вы Edit или Memo, это событие работает одинаково.

Методы.

Мутоды это функции обесппечивающие работу в с полями объекта. Также методы могут быть закрыты и использоватся для вычисления промежуточных значений внутри объекта.

Есть два способа передачи параметров в метод:

  1. По значению, при этом внутри метода будет создана копия параметра и изменение переменной переданной в метод не будет влиять на переменную в вызывающем окружении

  2. По ссылки, Это значит что в метод будет передан только адрес в ОП по которому находится значение переменной. Следовательно что любое изменение переменной внутри метода изменить значение перменной и в вызывающем окружении.

Также метод может быть статичиским, что это значит:

Это значит что мы можем описать в классе метод для работы снашим классом, и чтобы не создовать еще один объект в который мы передадим уже существующий объект для вычисление каких либо данных. А вызовем статичиский метод без создание экземпляра класса и передадим уже в качестве параметра наш объект, статичииский метод вернет нам результат вычисления.

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

Пример СИ++:

Класс английских длинн

Class test

{

Private:

Int feet;

Float inches;

Public:

Test() // конструктор без параметров

{

Feet=0;

Inches = 0;

}

Test(int f,float i) // конструктор с параметрами

{

Feet = f;

Inches = I;

}

Void ShowTest()

{

Cout<<feet<<” - ”<<inches<<endl;

}

Static test AddSixInches(test *t1) // добавить 6 дюймов

{

Float I = t1->inches;

Int f = t1->feet

I+=6;

If(i>12){

F++;

I - =12;

}

T1->feet = f;

T1->inches =I;

}

}

Void main()

{

Test d1(5,7);

D1.ShowTest(); // выведет 5-7

Test::AddSixInches(&d1);

D1.ShowTest(); // выведет 6-1

}

События примеры на С#

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

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

  • Описание делегата, задающего сигнатуру обработчиков событий

  • Описание события

  • Описания метода (методов), инициирующих событие

Синтаксис:

[атрибуты] [спецификатор ] event [тип] [ имя события]

Могут использоватся следующие спецификаторы: new,public,protected,internal,private,static,virtual,sealed,override,abstract,extern.

Тип – это тип делегата на котором основано событие.

Пример:

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

namespace @event

{

class Program

{

delegate void handler(); // делегат для добавления обработчиков события

class Sender

{

public event handler event_; // События

public void Send() // метод вызова событий

{

Console.WriteLine("Сообщение отправлено всем наблюдателям");

if (event_ != null) event_();

}

}

class Recipient1

{

public void rec() // Обработчик события

{

Console.WriteLine("Получил сообщение");

}

}

class Recipient2

{

public void rec() // Обработчик события

{

Console.WriteLine("Я тоже получил сообщение");

}

}

static void Main(string[] args)

{

Recipient1 rec1 = new Recipient1();

Recipient2 rec2 = new Recipient2();

Sender send = new Sender();

send.event_ += new handler(rec1.rec); // Регистрируем обработчик события

send.event_ += new handler(rec2.rec); // Регистрируем обработчик события

send.Send(); // Вызов событий

Console.Read();

}

}

}

Вывод:

Сообщение отправлено всем наблюдателям

Получил сообщение

Я тоже получил сообщение

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