- •Университет машиностроения
- •Рейтинг языков программирования на февраль 2012 г.
- •UML Unified Modeling Language — унифицированный язык моделирования
- •Use case diagrams — Диаграммы вариантов использования
- •Activity diagrams — Диаграммы деятельности
- •Sequence diagrams —
- •Class diagrams — Диаграммы классов
- •Понятие объекта
- •Абстракция и инкапсуляция
- •Наследование
- •Полиморфизм
- •Достоинства ООП
- •Недостатки ООП
- •Описание класса
- •Спецификаторы класса
- •Элементы описания класса
- •Сквозной пример класса
- •Описание объекта (экземпляра)
- •Пример создания объектов (экземпляров)
- •Присваивание и сравнение объектов
- •Данные: поля и константы
- •Пример класса
- •Спецификаторы полей и констант класса
- •Методы
- •Синтаксис метода
- •Примеры методов
- •Параметры методов
- •Пример
- •Вызов метода
- •Примеры передачи аргументов в метод
- •Способы передачи аргументов в метод
- •Передача аргумента по значению
- •Передача аргумента по ссылке (ref, out)
- •Типы параметров
- •Пример: параметры-значения и ссылки ref
- •Пример: выходные параметры out
- •Summary: Правила применения параметров
- •Методы с переменным количеством аргументов
- •Рекурсивные методы
- •Характеристики рекурсии
- •Ключевое слово this
- •Использование явного this
- •Конструкторы
- •Пример класса с конструктором
- •Пример класса с двумя конструкторами
- •Сквозной пример класса
- •Любой человек должен уметь менять пеленки, планировать вторжения, резать свиней, конструировать здания, управлять
- •Свойства
- •Пример описания свойств
- •Сквозной пример класса
- •Пример описания свойств
- •Перегрузка методов
- •Сквозной пример класса
- •Операции класса
- •Общие правила описания операций класса
- •Унарные операции
- •Правила оформления унарной операции класса
- •Бинарные операции
- •Пример бинарных операций класса
- •Операции преобразования типа
- •Применение операций преобразования
- •Summary
- •Интерфейс класса
- •Состав класса
- •Элементы класса
- •Далее…
Пример описания свойств
namespace ConsoleApplication1
{class Ball {
public Ball(double radius, double density)
{this.radius = radius; this.density = density;
}
public double Mass
{ get { return radius * density; } } public double Diameter
{ get { return radius * 2; } } double radius;
double density;
}
class Program
{static void Main(string[] args)
{
Ball ball = new Ball(10, 6.2); Console.WriteLine("Диаметр: " +
ball.Diameter +
"Масса: " + ball.Mass);
}} }
Информатика. 3 семестр. Тема 2. ООП на C#
Перегрузка методов
•Использование нескольких методов с одним и тем же именем, но различными типами параметров называется перегрузкой методов.
•Компилятор определяет, какой именно метод требуется вызвать, по типу фактических параметров. Это называется разрешением (resolution) перегрузки.
// Возвращает наибольшее из двух целых: int max( int a, int b )
// Возвращает наибольшее из трех целых: int max( int a, int b, int c )
//Возвращает наибольшее из первого параметра
//и длины второго:
int max ( int a, string b )
...
Console.WriteLine( max( 1, 2 ) ); Console.WriteLine( max( 1, 2, 3 ) ); Console.WriteLine( max( 1, "2" ) );
• Перегрузка методов является проявлением полиморфизма
Информатика. 3 семестр. Тема 2. ООП на C#
Сквозной пример класса
class Monster {
public Monster() // конструктор
{
this.name = "Noname"; this.health = 100; this.ammo = 100;
}
public Monster( string name ) : this()
{
this.name = name;
}
public Monster( int health, int ammo, string name )
{
this.name = name; this.health = health; this.ammo = ammo;
} |
|
public string GetName() |
// метод |
{ return name; } |
|
public int GetAmmo() |
// метод |
{ return ammo;} |
|
public int Health { |
|
// свойство |
get { return health; } |
|
|
set { if (value > 0) health = value; |
||
else |
health = 0; |
|
} |
|
|
} |
|
|
public void Passport() |
// метод |
|
{ Console.WriteLine( |
|
"Monster {0} \t health = {1} \
ammo = {2}", name, health, ammo );
}
public override string ToString(){ string buf = string.Format( "Monster {0} \t health = {1} \ ammo = {2}", name, health, ammo); return buf; }
string name;
int health, ammo;
}
Операции класса
•В С# можно переопределить для своих классов действие большинства операций. Это позволяет применять экземпляры объектов в составе выражений аналогично переменным стандартных типов:
MyObject a, b, c; ...
c = a + b; // операция сложения класса MyObject
•Определение собственных операций класса называют перегрузкой операций.
•Операции класса описываются с помощью методов специального вида (функций- операций):
public static имя_класса operator операция( параметры) {… }
Пример: public static MyObject operator --( MyObject m ) { … }
В C# три вида операций класса: унарные, бинарные и операции преобразования типа.
Информатика. 3 семестр. Тема 2. ООП на C#
Общие правила описания операций класса
•операция должна быть описана как открытый статический метод класса (спецификаторы public static);
•параметры в операцию должны передаваться по значению (то есть не должны предваряться ключевыми словами ref или out);
•сигнатуры всех операций класса должны различаться;
•типы, используемые в операции, должны иметь не меньшие права доступа, чем сама операция (то есть должны быть доступны при использовании операции).
Информатика. 3 семестр. Тема 2. ООП на C#
Унарные операции
Можно определять: + - ! ~ ++ -- true false
Примеры заголовков:
public static int operator +( MyObject m ) // унарный плюс public static MyObject operator --( MyObject m ) // декремент
class Monster {
public static Monster operator ++(Monster m) { Monster temp = new Monster();
temp.health = m.health + 1; return temp;
}
…
}
…
Monster vasia = new Monster(); ++vasia; vasia++;
…
Информатика. 3 семестр. Тема 2. ООП на C#
Правила оформления унарной операции класса
Параметр функции-операции должен иметь тип этого класса. Операция должна возвращать:
•для операций +, -, ! и ~ величину любого типа;
•для операций ++ и -- величину типа класса, для которого она определяется.
Операции не должны изменять значение передаваемого им операнда. Операция, возвращающая величину типа класса, для которого она определяется, должна создать новый объект этого класса, выполнить с ним необходимые действия и передать его в качестве результата.
Префиксный и постфиксный инкремент/декремент не различаются
Информатика. 3 семестр. Тема 2. ООП на C#
Бинарные операции
Можно определять:
+ - * / % & | ^ << >> == != > < >= <=
Примеры заголовков бинарных операций:
public static MyObject operator + ( MyObject m1, MyObject m2 ) public static bool operator == ( MyObject m1, MyObject m2 )
Хотя бы один параметр, передаваемый в операцию, должен иметь тип класса, для которого она определяется. Операция может возвращать величину любого типа.
Чаще всего в классе определяют операции сравнения на равенство и неравенство для того, чтобы обеспечить сравнение объектов, а не их ссылок.
Операции == и !=, > и <, >= и <= определяются только парами и обычно возвращают логическое значение.
Информатика. 3 семестр. Тема 2. ООП на C#
Пример бинарных операций класса
class Monster {
public static Monster operator +( Monster m, int k ) { Monster temp = new Monster();
temp.ammo = m.ammo + k; return temp;
}
public static Monster operator +( int k, Monster m ) { Monster temp = new Monster();
temp.ammo = m.ammo + k; return temp;
}
…
}
…
Monster vasia = new Monster(); Monster masha = vasia + 10; Monster petya = 5 + masha;
…
Информатика. 3 семестр. Тема 2. ООП на C#
Операции преобразования типа
Обеспечивают возможность явного и неявного преобразования между |
|
пользовательскими типами данных. |
|
implicit operator тип ( параметр ) |
// неявное преобразование |
explicit operator тип ( параметр ) |
// явное преобразование |
Выполняют преобразование из типа параметра в тип, указанный в заголовке операции. Одним из этих типов должен быть класс, для которого определяется операция. Таким образом, операции выполняют преобразование либо типа класса к другому типу, либо наоборот.
public static implicit operator int( Monster m )
{
return m.health;
}
public static explicit operator Monster( int h )
{
return new Monster( h, 100, "FromInt" ); } ...
Monster Masha = new Monster( 200, 200, "Masha" );
int i = Masha; |
// неявное преобразование |
Masha = (Monster) 500; |
// явное преобразование |
Информатика. 3 семестр. Тема 2. ООП на C#