Учебный курс Объектно-ориентированный анализ и программирование Лекция 7 Методы как средство реализации операций Лекции читает кандидат технических наук.

Презентация:



Advertisements
Похожие презентации
Учебный курс Объектно-ориентированный анализ и программирование Лекция 4 Трансформация логической модели в программный код Лекции читает кандидат технических.
Advertisements

Кафедра ОСУ, Java 2004 Слайд 1 Наследование Наследование позволяет использовать существующий класс для определения новых классов, т.е. способствует.
Наследование Наследование – это отношение является между классами. class Person { string first_name; int birth_year;... } class Student : Person { float.
Перегрузка операторов x = a + b результат 1-й операнд2-й операнд оператор По количеству операндов операторы делятся на: унарные (один операнд) бинарные.
Лекция 2 Раздел 2.1 Windows Phone Темы раздела 3.

Классы в С#. Перечисления С# Перечисление задает конечное множество возможных значений, которые могут получать объекты класса перечисление. [атрибуты][модификаторы]
ОБЪЕКТНО- ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ (ООП) 1.
Синтаксис языка Java. Символы и синтаксис Перевод строчки эквивалентен пробелу Регистр в именах различается.
С# и ООП Формальное определение класса с C# Класс в C# - это пользовательский тип данных (user defined type), который состоит из данных (часто называемых.
Лекция 2: Описание класса 1. Поля 2. Методы 3. Конструкторы.
Типовые расчёты Растворы
Методы классов. Методы класса [атрибуты][модификаторы] {void|тип_результата_функции} имя_метода ([список_формальных_аргументов]) { тело метода} Список.
Инкапсуляция полей и констант в языке C# (1) Поле: - инициализация факультативна, однако запрещен доступ к полям и методам того же типа; - поля структуры.
Основы ООП и C# Работа с объектами и классами. Классы Класс специальный тип данных для описания объектов. Он определяет данные и поведение типа. Определение.
НаследованиеНаследование2 class Point { double x; double y; Color color; }; class Radius { Point center; double radius; };
1 ©Павловская Т.А. (СПбГУ ИТМО) Курс «С#. Программирование на языке высокого уровня» Павловская Т.А.
Статические поля класса Статические поля хранят данные, общие для всех элементов класса. Статическое поле существует в единственном экземпляре для всех.
Объектно-ориентированное программирование С++. Лекция 6 Карпов В.Э.
1 Переопределение операций Макаревич Л. Г.. 2 Зачем нужна перегрузка операций? class Complex { double re; double im; public: Complex(double r=0, double.
Транксрипт:

Учебный курс Объектно-ориентированный анализ и программирование Лекция 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 Интерфейс