Учебный курс Объектно-ориентированный анализ и программирование Лекция 7 Методы как средство реализации операций Лекции читает кандидат технических наук Курак Михаил Валерьянович
2 Методы Метод определяет некоторую процедуру обработки данных. Выполнение программы можно рассматривать как взаимодействие методов с точки зрения: управления (вызов/возврат) обмен данными ТипВозвращаемогоОбъекта Имя (параметры) { процедура } Определение метода может быть выполнено только в составе класса public private protected static void если отсутствует
3 Взаимодействие по управлению Вызов Возврат Класс1 + Метод1() + Метод2() + Метод3() + Метод4() Класс2 + Метод1() - Метод2() + Метод3() Объект.Метод1() Класс 2.Метод3() Метод4()
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 Переопределение методов virtual new override
24 Переопределение методов virtual new override class Класс2:Класс1 { public new void Метод() { Console.Write("ВАСИЛЬЕВ"); } } class Класс1 { public virtual void Метод() { Console.Write("АНДРЕЕВ"); } } Класс2 объект2 = new Класс2(); объект2.Метод(); // ВАСИЛЬЕВ
25 Переопределение методов virtual new override class Класс1 { public virtual void Метод() { Console.Write("АНДРЕЕВ"); } } Класс3 объект3 = new Класс3(); объект3.Метод(); // СИДОРОВ class Класс3 : Класс1 { public override void Метод() { Console.Write("СИДОРОВ"); } }
26 Переопределение методов virtual new override class Класс2:Класс1 { public new void Метод() { Console.Write("ВАСИЛЬЕВ"); } } class Класс1 { public virtual void Метод() { Console.Write("АНДРЕЕВ"); } } Класс1 ссылка = new Класс2(); ссылка.Метод(); //АНДРЕЕВ
27 Переопределение методов virtual new override 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 Интерфейс