370 likes | 628 Views
Рассмотрены основные принципы объектного подхода к проектированию программного обеспечения. Приведены фрагменты кода C#, для реализующие описание классов.
E N D
Кот Барсик – экземпляр класса Animal class Animal Объектный подход к проектированию программ Установочная лекция по дисциплине «Высокоуровневые методы информатики и программирования»
Сложность программного обеспечения Декомпозиция
Абстрагирование Абстракция фокусируется на существенных с точки зрения наблюдателя характеристиках объекта
Синхронный двигатель Математическая модель двигателя
Как строить абстрактный объект? В окружающем нас мире можно выделить различные группы вещей. Назовем их классами.
Класс Animal class 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; intnumberOfLegs; int height; int length; string color; boolhasTail; boolisMammal; boolspellingCorrect; } AnimalBarsik; 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;
Описание класса [ атрибуты ] [ спецификаторы ] classимя_класса [ : предки ] тело_класса • Имя класса задается по общим правилам. • Тело класса — список описаний его элементов, заключенный в фигурные скобки. • Атрибуты задают дополнительную информацию о классе. • Спецификаторы определяют свойства класса, а также доступность класса для других элементов программы. Простейший пример описания класса: class Demo {} // пустой класс
Доступ class Animal { public string kindOfAnimal; public string name; publicintnumberOfLegs; publicint height; publicint length; public string color; boolhasTail; protectedboolisMammal; privateboolspellingCorrect; } Ключ к hasTail не указан???
Методы Сложение двух чисел А теперь, используя этот МЕТОД, сложи 2 числа 5 и 3
void Say() { Console.WriteLine(“Myav"); } … Animal Barsik=new Animal (); Barsik.Say()
.Net Содержит огромную библиотеку классов, сгруппированных по пространствам имен
Пример класса public intHealth { // свойство 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;// поле } 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 intGetName() // метод { return name; } public intGetAmmo() // метод { return ammo;}
Полиморфизм • ООП позволяет писать гибкие, расширяемые и читабельные программы. • Во многом это обеспечивается благодаря полиморфизму, под которым понимается возможность во время выполнения программы с помощью одного и того же имени выполнять разные действия или обращаться к объектам разного типа. • Чаще всего понятие полиморфизма связывают с механизмом виртуальных методов. МетодMove (double s, double v)
Достоинства ООП • использование при программировании понятий, близких к предметной области; • возможность успешно управлять большими объемами исходного кода благодаря инкапсуляции, то есть скрытию деталей реализации объектов и упрощению структуры программы; • возможность многократного использования кода за счет наследования; • сравнительно простая возможность модификации программ; • возможность создания и использования библиотек объектов.
Недостатки ООП • некоторое снижение быстродействия программы, связанное с использованием виртуальных методов; • идеи ООП не просты для понимания и в особенности для практического использования; • для эффективного использования существующих объектно-ориентированных систем требуется большой объем первоначальных знаний; • неграмотное применение ООП может привести к значительному ухудшению характеристик разрабатываемой программы.
Пример описания классов в С# Общее понятие. Поля, методы, ключи доступа. Конструкторы. Болгарина Е.В., РГППУ, 2010
Описание класса class <имя>{ [ private] <описание скрытых элементов> public <описание доступных элементов> }; Болгарина Е.В., РГППУ, 2010
Пример 1. Опишем класс Персона. 1.1. Полями данного класса будут Имя, Возраст, Зарплата. 1.2. Объявим метод вывода на экран информации об объекте. Болгарина Е.В., РГППУ, 2010
Создадим 2 объекта (экземпляры класса – Рабочий и Начальник). Болгарина Е.В., РГППУ, 2010
В итоге должно получиться следующее: Самостоятельно: Добавьте строки, задающие значения полям объекта boss. Результат работы программы должен быть примерно таким: Болгарина Е.В., РГППУ, 2010
Ключи доступа. Изменим ключ доступа к полям с Publicна Private Болгарина Е.В., РГППУ, 2010
Определение метода вне класса. В примере метод Show_informationопределен внутри класса. Но при большом количестве методов такой способ сделает описание класса слишком громоздким. Поэтому чаще всего в описании класса ограничиваются объявлением метода, а его реализацию описывают ниже. Болгарина Е.В., РГППУ, 2010
Конструкторы. • Для создания объектов класса с инициализацией полей. • Конструктор всегда имеет такое же имя, как и класс. • Конструктор не возвращает никаких значений. • При создании объектов программа каждый раз будет вызывать описанный конструктор. • Конструкторов может быть несколько, в зависимости от того, какие из параметров вы хотите инициализировать. Болгарина Е.В., РГППУ, 2010
Опишем конструктор для класса Person: Болгарина Е.В., РГППУ, 2010
Теперь создавать объекты в теле главной процедуры будем с помощью Конструктора. Болгарина Е.В., РГППУ, 2010
Результат: Болгарина Е.В., РГППУ, 2010
Конструкторы по умолчанию Болгарина Е.В., РГППУ, 2010
конструктор с пустыми полями Болгарина Е.В., РГППУ, 2010
Обращение к закрытым полям класса. • Принцип сокрытия информации (инкапсуляция) предоставляет программе минимум информации по работе с классом. • Изменение полей класса возможно только через использование методов самого класса. • Создадим открытые, т.е. доступные программе методы по управлению полями класса Person: • Метод изменения зарплаты change_salary; • Метод вывода возраста get_age; Болгарина Е.В., РГППУ, 2010
Лабораторная работаИндивидуальные задания: • 1.Описать класс Aeroflot, содержащую закрытые поля: название пункта назначения рейса, номер рейса, тип самолета. • Описать конструкторы без параметров и с различным числом параметров. • Описать открытые методы Вывод информации, Замена номера рейса. • Создать несколько объектов (не менее 3х) и продемонстрировать работу созданных методов. • 2. Описать класс Price, содержащий следующие поля: название товара, название магазина, в котором продается товар, количество товара, стоимость единицы товара. • Описать конструкторы без параметров и с различным числом параметров. • Описать открытые методы Вывод информации, Замена стоимости товара. • Создать несколько объектов (не менее 3х) и продемонстрировать работу созданных методов. • Определить общую стоимость товара в определенном магазине. Болгарина Е.В., РГППУ, 2010