Методы как средство реализации операций

  • ppt
  • 11.05.2020
Публикация на сайте для учителей

Публикация педагогических разработок

Бесплатное участие. Свидетельство автора сразу.
Мгновенные 10 документов в портфолио.

Иконка файла материала 115. Методы как средство реализации операций.ppt

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

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

2

Методы


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

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

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

public
private
protected

static

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

3

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

Вызов

Возврат

4

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

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


ТипВозврата Имя (тип имя, out тип имя, ref тип имя)
{

return объект;
}

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

константа

переменная

5

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


Конструктор - специфический метод класса.

Специфика заключается:

в назначении – конструктор автоматически вызывается при создании объекта и в силу этого используется для инициализации полей объекта

в синтаксисе – конструктор должен иметь имя, совпадающее с именем класса, конструктор не может иметь возвращаемого значения.

6

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


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

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

7

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


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

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

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

8

Пример использования свойств


9

Пример использования свойств


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

10

Пример использования свойств


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

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

11

public string Номер
{
set { номер = value; }
}




Объект.Номер = “Ого”;


public void Номер()
{
this.номер = номер;
}




объект.Номер(“Ого”);

12

Пример использования свойств


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 тариф;}
}
}

13

Пример использования свойств


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";

14

Полиморфизм

15

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

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

16

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

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

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





}

17

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

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

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

public double Sum(float x, float y) { return (double)(x + y); }



}

18

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

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

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; }

}

19

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

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("ВАСЯ","ИВАНОВ");


}

20

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

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);

}

21

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

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);
}

22

Полиморфизм

23

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

24

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

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

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


Класс2 объект2 = new Класс2();


объект2.Метод(); // ВАСИЛЬЕВ

25

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

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

Класс3 объект3 = new Класс3();

объект3.Метод(); // СИДОРОВ

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

26

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

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

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

Класс1 ссылка = new Класс2();

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

27

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

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


Класс1 ссылка = new Класс3();

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

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

28

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

29

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

class Товар
{
public virtual void Цена() { Console.Write("Не знаю"); }
}

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

30

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

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

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

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

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

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

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

31

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

class Товар
{
public virtual void Цена() { Console.Write("Не знаю"); }
}

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

32

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

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

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

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

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

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

33

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

34

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

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

35

Интерфейс