Upload
bolevik
View
676
Download
5
Embed Size (px)
DESCRIPTION
Описание основных принципов объектно-ориентированного программирования. приведены фрагменты кода на C#
Citation preview
Объектный подход к проектированию программ
Установочная лекция по дисциплине «Высокоуровневые методы информатики и программирования»
class
Animal
Кот Барсик – экземпляр класса Animal
Сложность программного обеспечения Декомпозиция
Абстрагирование
Абстракция фокусируется на существенных с точки зрения наблюдателя характеристиках объекта
Моделирование
Синхронный двигатель
Математическая модель двигателя
Как строить абстрактный объект?
В окружающем нас мире можно выделить различные группы вещей. Назовем их классами.
class Animal
{
}
Класс Animal
Animal Barsik;
Kind of animal = "Cat" ("Кот").Height = 50 cm (большой котяра!).Length = 110 cm (это рысь скорее, а не домашняя кошка!).Number of legs = 4.
Color = "Black" (черный).Has tail = true (истина).Is mammal = true (истина).
Классы и объекты (экземпляры) класса
class Animal
{ string kindOfAnimal;
string name;
int numberOfLegs;
int height;
int length;
string color;
bool hasTail;
bool isMammal;
bool spellingCorrect;
}
Animal Barsik;
Barsik = new Animal();
Barsik.kindOfAnimal = "Cat";
Barsik.name = "Кот Барсик"; Barsik.numberOfLegs = 4;
Barsik.height = 50;
Barsik.length = 110;
Barsik.color = "Black";
Barsik.hasTail = true;
Barsik.isMammal = true;
©Павловская Т.А. (СПбГУ ИТМО)
9
Описание класса
[ атрибуты ] [ спецификаторы ] class имя_класса [ : предки ]
тело_класса
Имя класса задается по общим правилам.
Тело класса — список описаний его элементов, заключенный в фигурные
скобки.
Атрибуты задают дополнительную информацию о классе.
Спецификаторы определяют свойства класса, а также доступность класса
для других элементов программы.
Простейший пример описания класса:
class Demo {} // пустой класс
Доступclass Animal
{
public string kindOfAnimal; public string name; public int numberOfLegs; public int height; public int length; public string color; bool hasTail; protected bool isMammal; private boolspellingCorrect; }
Ключ к hasTail не указан???
Методы
А теперь, используя этот МЕТОД, сложи 2 числа 5 и 3
Сложение двух чисел
void Say()
{
Console.WriteLine(“Myav");
}
Barsik.Say()
Animal Barsik=new Animal
();
…
.Net
Содержит огромную библиотеку классов, сгруппированных по пространствам имен
©Павловская Т.А. (СПбГУ ИТМО)
14
Пример класса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 int 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; // поле
}
НАСЛЕДОВАНИЕ
©Павловская Т.А. (СПбГУ ИТМО)
16
Полиморфизм
ООП позволяет писать гибкие, расширяемые и читабельные программы.
Во многом это обеспечивается благодаря полиморфизму, под которым понимается возможность во время выполнения программы с помощью одного и того же имени выполнять разные действия или обращаться к объектам разного типа.
Чаще всего понятие полиморфизма связывают с механизмом виртуальных методов.
Метод Move (double s, double v)
©Павловская Т.А. (СПбГУ ИТМО)
17
Достоинства ООП
использование при программировании понятий, близких к предметной области;
возможность успешно управлять большими объемами исходного кода благодаря инкапсуляции, то есть скрытию деталей реализации объектов и упрощению структуры программы;
возможность многократного использования кода за счет наследования;
сравнительно простая возможность модификации программ;
возможность создания и использования библиотек объектов.
©Павловская Т.А. (СПбГУ ИТМО)
18
Недостатки ООП
некоторое снижение быстродействия программы, связанное с использованием виртуальных методов;
идеи ООП не просты для понимания и в особенности для практического использования;
для эффективного использования существующих объектно-ориентированных систем требуется большой объем первоначальных знаний;
неграмотное применение ООП может привести к значительному ухудшению характеристик разрабатываемой программы.
Общее понятие.Поля, методы, ключи доступа. Конструкторы.
Пример описания классов в С#
19 Болгарина Е.В., РГППУ, 2010
Описание класса
class <имя>{
[ private ]
<описание скрытых элементов>
public
<описание доступных элементов>
};20 Болгарина Е.В., РГППУ, 2010
Пример 1. Опишем класс Персона.
Болгарина Е.В., РГППУ, 201021
1.1. Полями данного класса будут Имя, Возраст, Зарплата.1.2. Объявим метод вывода на экран информации об объекте.
Создадим 2 объекта (экземпляры класса – Рабочий и Начальник).
Болгарина Е.В., РГППУ, 201022
В итоге должно получиться следующее:
Болгарина Е.В., РГППУ, 201023
Самостоятельно:Добавьте строки, задающие значения полям объекта boss.
Результат работы программы должен быть примерно таким:
Ключи доступа.
Болгарина Е.В., РГППУ, 201024
Изменим ключ доступа к полям с Public на Private
Определение метода вне класса.
Болгарина Е.В., РГППУ, 201025
В примере метод Show_information определен внутри класса. Но при большом количестве методов такой способ сделает описание класса слишком громоздким. Поэтому чаще всего в описании класса ограничиваются объявлением метода, а его реализацию описывают ниже.
Конструкторы.
Болгарина Е.В., РГППУ, 201026
Для создания объектов класса с инициализацией полей.
Конструктор всегда имеет такое же имя, как и класс.
Конструктор не возвращает никаких значений.
При создании объектов программа каждый раз будет вызывать описанный конструктор.
Конструкторов может быть несколько, в зависимости от того, какие из параметров вы хотите инициализировать.
Опишем конструктор для класса Person:
Болгарина Е.В., РГППУ, 201027
Теперь создавать объекты в теле главной процедуры будем с помощью Конструктора.
Болгарина Е.В., РГППУ, 201028
Результат:
Болгарина Е.В., РГППУ, 201029
Конструкторы по умолчанию
Болгарина Е.В., РГППУ, 201030
конструктор с пустыми полями
Болгарина Е.В., РГППУ, 201031
Обращение к закрытым полям класса.
Болгарина Е.В., РГППУ, 201032
Принцип сокрытия информации (инкапсуляция) предоставляет программе минимум информации по работе с классом.
Изменение полей класса возможно только через использование методов самого класса.
Создадим открытые, т.е. доступные программе методы по управлению полями класса Person:
Метод изменения зарплаты change_salary;
Метод вывода возраста get_age;
Болгарина Е.В., РГППУ, 201033
Болгарина Е.В., РГППУ, 201034
Болгарина Е.В., РГППУ, 201035
Лабораторная работа
Индивидуальные задания:
Болгарина Е.В., РГППУ, 201036
1.Описать класс Aeroflot, содержащую закрытые поля: название пункта назначения рейса, номер рейса, тип самолета.Описать конструкторы без параметров и с различным числом параметров.Описать открытые методы Вывод информации, Замена номера рейса.Создать несколько объектов (не менее 3х) и продемонстрировать работу созданных методов.
2. Описать класс Price, содержащий следующие поля: название товара, название магазина, в котором продается товар, количество товара, стоимость единицы товара.Описать конструкторы без параметров и с различным числом параметров.Описать открытые методы Вывод информации, Замена стоимости товара.Создать несколько объектов (не менее 3х) и продемонстрировать работу созданных методов.Определить общую стоимость товара в определенном магазине.