Главная страница

лекция. Лекция 7 Методы как средство реализации операций Лекции читает кандидат технических наук


Скачать 485.5 Kb.
НазваниеЛекция 7 Методы как средство реализации операций Лекции читает кандидат технических наук
Анкорлекция
Дата25.10.2021
Размер485.5 Kb.
Формат файлаppt
Имя файла529973.ppt
ТипЛекция
#255839

Учебный курс Объектно-ориентированный анализ и программирование


Лекция 7
Методы как средство реализации операций
Лекции читает
кандидат технических наук
Курак Михаил Валерьянович

Методы


Метод определяет некоторую процедуру обработки данных.
Выполнение программы можно рассматривать как взаимодействие методов с точки зрения:
управления (вызов/возврат)
обмен данными


<доступ><принадлежность> ТипВозвращаемогоОбъекта Имя (параметры)
{
<локальные переменные>
процедура
}


Определение метода может быть выполнено только в составе класса


public
private
protected


static


void если отсутствует

Взаимодействие по управлению


Вызов


Возврат


Класс1


+ Метод1()
+ Метод2()
+ Метод3()
+ Метод4()


Класс2


+ Метод1()
- Метод2()
+ Метод3()


Объект.Метод1()


Класс2.Метод3()


Класс2. Метод3()


Метод4()

Взаимодействие по данным


Общие поля класса
Параметры метода
Возврат данных из метода


ТипВозврата Имя (тип имя, out тип имя, ref тип имя)
{
return объект;
}


Приемник = Имя (аргумент, out аргумент ref аргумент );


константа


переменная

Конструкторы и свойства


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

Конструкторы и свойства


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


Свойство - специфический метод.
Специфика заключается:
в назначении – доступ к закрытым полям объекта или класса
в синтаксисе

Конструкторы и свойства


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


Свойство - специфический метод.
Специфика заключается:
в назначении – доступ к закрытым полям объекта или класса
в синтаксисе
    наличие специальных блоков get, set
    вызов в форме, аналогичной обращению к полю


public ТипВозвращаемогоОбъекта Имя свойства
{
set { код для установки поля } //неявный параметр (value)
get {код для чтения поля}
}


class Автомобиль
{
protected string номер;
public Автомобиль(string номер)
{
this.номер = номер;
}
public string Номер
{
set { номер = value; }
get { return номер; }
}
}


class Автомобиль
{
protected string номер;
public Автомобиль(string номер)
{
this.номер = номер;
}
public string Номер
{
set { номер = value; }
get { return номер; }
}
}


Маршрутка восточный;
восточный = new Маршрутка("A222AA-77", 10);
Маршрутка.Тариф = 10.0;
восточный.Номер = "В111ВВ-77";


public string Номер
{
set { номер = value; }
}
Объект.Номер = “Ого”;


public void Номер()
{
this.номер = номер;
}
объект.Номер(“Ого”);


class Автомобиль
{
protected string номер;
public Автомобиль(string номер)
{
this.номер = номер;
}
public string Номер
{
set { номер = value; }
get { return номер; }
}
}


class Маршрутка:Автомобиль
{
private static double тариф=1.0;
private int перевезеноПассажиров;
public Маршрутка(string номер, int перевезеноПассажиров):
base(номер)
{
this.перевезеноПассажиров = перевезеноПассажиров;
}
public static double Тариф
{
set { тариф = value; } get { return тариф;}
}
}


class Автомобиль
{
protected string номер;
public Автомобиль(string номер)
{
this.номер = номер;
}
public string Номер
{
set { номер = value; }
get { return номер; }
}
}


class Маршрутка:Автомобиль
{
private static double тариф=1.0;
private int перевезеноПассажиров;
public Маршрутка(string номер, int перевезеноПассажиров):
base(номер)
{
this.перевезеноПассажиров = перевезеноПассажиров;
}
public static double Тариф
{
set { тариф = value; } get { return тариф;}
}
}


Маршрутка восточный;
восточный = new Маршрутка("A222AA-77", 10);
Маршрутка.Тариф = 10.0;
восточный.Номер = "В111ВВ-77";

Полиморфизм


Полиморфизм


Перегрузка
методов


Перегрузка
операций


Переопределение
методов

Перегрузка методов


Сигнатура метода:
Имя
Количество параметров
Типы параметров и их модификаторы

Перегрузка методов


Сигнатура метода:
Имя
Количество параметров
Типы параметров и их модификаторы


class Сложение
{
public double Sum(int x, int y) { return (double)(x + y); }
}

Перегрузка методов


Сигнатура метода:
Имя
Количество параметров
Типы параметров и их модификаторы


class Сложение
{
public double Sum(int x, int y) { return (double)(x + y); }
public double Sum(float x, float y) { return (double)(x + y); }
}

Перегрузка методов


Сигнатура метода:
Имя
Количество параметров
Типы параметров и их модификаторы


class Сложение
{
public double Sum(int x, int y) { return (double)(x + y); }
public double Sum(float x, float y) { return (double)(x + y); }
public string Sum(string x, string y) { return x + y; }
}

Перегрузка методов


class Сложение
{
public double Sum(int x, int y) { return (double)(x + y); }
public double Sum(float x, float y) { return (double)(x + y); }
public string Sum(string x, string y) { return x + y; }
}


static void Main(string[] args)
{
Сложение сложение = new Сложение();
сложение.Sum("ВАСЯ","ИВАНОВ");
}

Перегрузка методов


class Сложение
{
public double Sum(int x, int y) { return (double)(x + y); }
public double Sum(float x, float y) { return (double)(x + y); }
public string Sum(string x, string y) { return x + y; }
}


static void Main(string[] args)
{
Сложение сложение = new Сложение();
сложение.Sum("ВАСЯ","ИВАНОВ");
сложение.Sum(5, 12.5);
}

Перегрузка методов


class Сложение
{
public double Sum(int x, int y) { return (double)(x + y); }
public double Sum(float x, float y) { return (double)(x + y); }
public string Sum(string x, string y) { return x + y; }
}


static void Main(string[] args)
{
Сложение сложение = new Сложение();
сложение.Sum("ВАСЯ","ИВАНОВ");
сложение.Sum(5, 12.5);
сложение.Sum(5, 5.0F);
}

Полиморфизм


Полиморфизм


Перегрузка
методов


Перегрузка
операций


Переопределение
методов

Переопределение методов


virtual


new


override

Переопределение методов


virtual


new


override


class Класс2:Класс1
{
public new void Метод()
{ Console.Write("ВАСИЛЬЕВ"); }
}


class Класс1 { public virtual void Метод() { Console.Write("АНДРЕЕВ"); } }


Класс2 объект2 = new Класс2();
объект2.Метод(); // ВАСИЛЬЕВ

Переопределение методов


virtual


new


override


class Класс1 { public virtual void Метод() { Console.Write("АНДРЕЕВ"); } }


Класс3 объект3 = new Класс3();
объект3.Метод(); // СИДОРОВ


class Класс3 : Класс1
{
public override void Метод()
{ Console.Write("СИДОРОВ"); }
}

Переопределение методов


virtual


new


override


class Класс2:Класс1
{
public new void Метод()
{ Console.Write("ВАСИЛЬЕВ"); }
}


class Класс1 { public virtual void Метод() { Console.Write("АНДРЕЕВ"); } }


Класс1 ссылка = new Класс2();
ссылка.Метод(); //АНДРЕЕВ

Переопределение методов


virtual


new


override


class Класс1 { public virtual void Метод() { Console.Write("АНДРЕЕВ"); } }


Класс1 ссылка = new Класс3();
ссылка.Метод(); //СИДОРОВ


class Класс3 : Класс1
{
public override void Метод()
{ Console.Write("СИДОРОВ"); }
}

Структура предметной области

Определения классов


class Товар
{
public virtual void Цена() { Console.Write("Не знаю"); }
}
class СоШтрихКодом:Товар
{
public new void Цена() { Console.Write("Цена по штрих-коду"); }
}
class СЦенником : Товар
{
public new void Цена() { Console.Write("Цена по ценнику"); }
}
class БезЦенника : Товар
{
public new void Цена() { Console.Write("Цена от товароведа"); }
}

Массив объектов


new СоШтрихКодом()


new СЦенником()


new БезЦенника()


Массив A типа Object


A[0] is СоШтрихКодом -> true


A[0].GetType().Name -> “СоШтрихКодом”

Определения классов


class Товар
{
public virtual void Цена() { Console.Write("Не знаю"); }
}
class СоШтрихКодом:Товар
{
public override void Цена(){Console.Write("Цена по штрих-коду"); }
}
class СЦенником : Товар
{
public override void Цена() { Console.Write("Цена по ценнику"); }
}
class БезЦенника : Товар
{
public override void Цена(){Console.Write("Цена от товароведа"); }
}

Массив объектов


new СоШтрихКодом()


new СЦенником()


new БезЦенника()


Массив A типа Товар


A[0].Цена() -> Цена по штрих-коду

Переопределение методов

Абстрактный класс


abstract class Товар { public abstract void Цена(); }

Интерфейс



написать администратору сайта