лекция. Лекция 7 Методы как средство реализации операций Лекции читает кандидат технических наук
Скачать 485.5 Kb.
|
Учебный курс Объектно-ориентированный анализ и программированиеЛекция 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 аргумент ); константа переменная Конструкторы и свойстваКонструктор - специфический метод класса. Специфика заключается: в назначении – конструктор автоматически вызывается при создании объекта и в силу этого используется для инициализации полей объекта в синтаксисе – конструктор должен иметь имя, совпадающее с именем класса, конструктор не может иметь возвращаемого значения. Конструкторы и свойстваКонструктор - специфический метод класса. Специфика заключается: в назначении – конструктор автоматически вызывается при создании объекта и в силу этого используется для инициализации полей объекта в синтаксисе – конструктор должен иметь имя, совпадающее с именем класса, конструктор не может иметь возвращаемого значения. Свойство - специфический метод. Специфика заключается: в назначении – доступ к закрытым полям объекта или класса в синтаксисе
вызов в форме, аналогичной обращению к полю Конструкторы и свойстваКонструктор - специфический метод класса. Специфика заключается: в назначении – конструктор автоматически вызывается при создании объекта и в силу этого используется для инициализации полей объекта в синтаксисе – конструктор должен иметь имя, совпадающее с именем класса, конструктор не может иметь возвращаемого значения. Свойство - специфический метод. Специфика заключается: в назначении – доступ к закрытым полям объекта или класса в синтаксисе
вызов в форме, аналогичной обращению к полю 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 Цена(); } Интерфейс |