Учебный курсОбъектно-ориентированный анализ и программирование
Лекция 7
Методы как средство реализации операций
2
Методы
Метод определяет некоторую процедуру обработки данных.
Выполнение программы можно рассматривать как взаимодействие методов с точки зрения:
управления (вызов/возврат)
обмен данными
<доступ><принадлежность> ТипВозвращаемогоОбъекта Имя (параметры)
{
<локальные переменные>
процедура
}
Определение метода может быть выполнено только в составе класса
public
private
protected
static
void если отсутствует
4
Взаимодействие по данным
Общие поля класса
Параметры метода
Возврат данных из метода
ТипВозврата Имя (тип имя, out тип имя, ref тип имя)
{
return объект;
}
Приемник = Имя (аргумент, out аргумент ref аргумент );
константа
переменная
5
Конструкторы и свойства
Конструктор - специфический метод класса.
Специфика заключается:
в назначении – конструктор автоматически вызывается при создании объекта и в силу этого используется для инициализации полей объекта
в синтаксисе – конструктор должен иметь имя, совпадающее с именем класса, конструктор не может иметь возвращаемого значения.
6
Конструкторы и свойства
Конструктор - специфический метод класса.
Специфика заключается:
в назначении – конструктор автоматически вызывается при создании объекта и в силу этого используется для инициализации полей объекта
в синтаксисе – конструктор должен иметь имя, совпадающее с именем класса, конструктор не может иметь возвращаемого значения.
Свойство - специфический метод.
Специфика заключается:
в назначении – доступ к закрытым полям объекта или класса
в синтаксисе
наличие специальных блоков get, set
вызов в форме, аналогичной обращению к полю
7
Конструкторы и свойства
Конструктор - специфический метод класса.
Специфика заключается:
в назначении – конструктор автоматически вызывается при создании объекта и в силу этого используется для инициализации полей объекта
в синтаксисе – конструктор должен иметь имя, совпадающее с именем класса, конструктор не может иметь возвращаемого значения.
Свойство - специфический метод.
Специфика заключается:
в назначении – доступ к закрытым полям объекта или класса
в синтаксисе
наличие специальных блоков get, set
вызов в форме, аналогичной обращению к полю
public ТипВозвращаемогоОбъекта Имя свойства
{
set { код для установки поля } //неявный параметр (value)
get {код для чтения поля}
}
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";
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);
}
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("СИДОРОВ"); }
}
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 СЦенником : Товар
{
32
Массив объектов
new СоШтрихКодом()
new СЦенником()
new БезЦенника()
Массив A типа Товар
A[0].Цена() -> Цена по штрих-коду
Материалы на данной страницы взяты из открытых источников либо размещены пользователем в соответствии с договором-офертой сайта. Вы можете сообщить о нарушении.