36
Объектный подход к проектированию программ Установочная лекция по дисциплине «Высокоуровневые методы информатики и программирования» class Animal Кот Барсик – экземпляр класса Animal

принципы ооп и программирование классов в C#

  • Upload
    bolevik

  • View
    676

  • Download
    5

Embed Size (px)

DESCRIPTION

Описание основных принципов объектно-ориентированного программирования. приведены фрагменты кода на C#

Citation preview

Page 1: принципы ооп и программирование классов в C#

Объектный подход к проектированию программ

Установочная лекция по дисциплине «Высокоуровневые методы информатики и программирования»

class

Animal

Кот Барсик – экземпляр класса Animal

Page 2: принципы ооп и программирование классов в C#

Сложность программного обеспечения Декомпозиция

Page 3: принципы ооп и программирование классов в C#

Абстрагирование

Абстракция фокусируется на существенных с точки зрения наблюдателя характеристиках объекта

Page 4: принципы ооп и программирование классов в C#

Моделирование

Page 5: принципы ооп и программирование классов в C#

Синхронный двигатель

Математическая модель двигателя

Page 6: принципы ооп и программирование классов в C#

Как строить абстрактный объект?

В окружающем нас мире можно выделить различные группы вещей. Назовем их классами.

Page 7: принципы ооп и программирование классов в C#

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 (истина).

Page 8: принципы ооп и программирование классов в C#

Классы и объекты (экземпляры) класса

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;

Page 9: принципы ооп и программирование классов в C#

©Павловская Т.А. (СПбГУ ИТМО)

9

Описание класса

[ атрибуты ] [ спецификаторы ] class имя_класса [ : предки ]

тело_класса

Имя класса задается по общим правилам.

Тело класса — список описаний его элементов, заключенный в фигурные

скобки.

Атрибуты задают дополнительную информацию о классе.

Спецификаторы определяют свойства класса, а также доступность класса

для других элементов программы.

Простейший пример описания класса:

class Demo {} // пустой класс

Page 10: принципы ооп и программирование классов в C#

Доступ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 не указан???

Page 11: принципы ооп и программирование классов в C#

Методы

А теперь, используя этот МЕТОД, сложи 2 числа 5 и 3

Сложение двух чисел

Page 12: принципы ооп и программирование классов в C#

void Say()

{

Console.WriteLine(“Myav");

}

Barsik.Say()

Animal Barsik=new Animal

();

Page 13: принципы ооп и программирование классов в C#

.Net

Содержит огромную библиотеку классов, сгруппированных по пространствам имен

Page 14: принципы ооп и программирование классов в C#

©Павловская Т.А. (СПбГУ ИТМО)

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; // поле

}

Page 15: принципы ооп и программирование классов в C#

НАСЛЕДОВАНИЕ

Page 16: принципы ооп и программирование классов в C#

©Павловская Т.А. (СПбГУ ИТМО)

16

Полиморфизм

ООП позволяет писать гибкие, расширяемые и читабельные программы.

Во многом это обеспечивается благодаря полиморфизму, под которым понимается возможность во время выполнения программы с помощью одного и того же имени выполнять разные действия или обращаться к объектам разного типа.

Чаще всего понятие полиморфизма связывают с механизмом виртуальных методов.

Метод Move (double s, double v)

Page 17: принципы ооп и программирование классов в C#

©Павловская Т.А. (СПбГУ ИТМО)

17

Достоинства ООП

использование при программировании понятий, близких к предметной области;

возможность успешно управлять большими объемами исходного кода благодаря инкапсуляции, то есть скрытию деталей реализации объектов и упрощению структуры программы;

возможность многократного использования кода за счет наследования;

сравнительно простая возможность модификации программ;

возможность создания и использования библиотек объектов.

Page 18: принципы ооп и программирование классов в C#

©Павловская Т.А. (СПбГУ ИТМО)

18

Недостатки ООП

некоторое снижение быстродействия программы, связанное с использованием виртуальных методов;

идеи ООП не просты для понимания и в особенности для практического использования;

для эффективного использования существующих объектно-ориентированных систем требуется большой объем первоначальных знаний;

неграмотное применение ООП может привести к значительному ухудшению характеристик разрабатываемой программы.

Page 19: принципы ооп и программирование классов в C#

Общее понятие.Поля, методы, ключи доступа. Конструкторы.

Пример описания классов в С#

19 Болгарина Е.В., РГППУ, 2010

Page 20: принципы ооп и программирование классов в C#

Описание класса

class <имя>{

[ private ]

<описание скрытых элементов>

public

<описание доступных элементов>

};20 Болгарина Е.В., РГППУ, 2010

Page 21: принципы ооп и программирование классов в C#

Пример 1. Опишем класс Персона.

Болгарина Е.В., РГППУ, 201021

1.1. Полями данного класса будут Имя, Возраст, Зарплата.1.2. Объявим метод вывода на экран информации об объекте.

Page 22: принципы ооп и программирование классов в C#

Создадим 2 объекта (экземпляры класса – Рабочий и Начальник).

Болгарина Е.В., РГППУ, 201022

Page 23: принципы ооп и программирование классов в C#

В итоге должно получиться следующее:

Болгарина Е.В., РГППУ, 201023

Самостоятельно:Добавьте строки, задающие значения полям объекта boss.

Результат работы программы должен быть примерно таким:

Page 24: принципы ооп и программирование классов в C#

Ключи доступа.

Болгарина Е.В., РГППУ, 201024

Изменим ключ доступа к полям с Public на Private

Page 25: принципы ооп и программирование классов в C#

Определение метода вне класса.

Болгарина Е.В., РГППУ, 201025

В примере метод Show_information определен внутри класса. Но при большом количестве методов такой способ сделает описание класса слишком громоздким. Поэтому чаще всего в описании класса ограничиваются объявлением метода, а его реализацию описывают ниже.

Page 26: принципы ооп и программирование классов в C#

Конструкторы.

Болгарина Е.В., РГППУ, 201026

Для создания объектов класса с инициализацией полей.

Конструктор всегда имеет такое же имя, как и класс.

Конструктор не возвращает никаких значений.

При создании объектов программа каждый раз будет вызывать описанный конструктор.

Конструкторов может быть несколько, в зависимости от того, какие из параметров вы хотите инициализировать.

Page 27: принципы ооп и программирование классов в C#

Опишем конструктор для класса Person:

Болгарина Е.В., РГППУ, 201027

Page 28: принципы ооп и программирование классов в C#

Теперь создавать объекты в теле главной процедуры будем с помощью Конструктора.

Болгарина Е.В., РГППУ, 201028

Page 29: принципы ооп и программирование классов в C#

Результат:

Болгарина Е.В., РГППУ, 201029

Page 30: принципы ооп и программирование классов в C#

Конструкторы по умолчанию

Болгарина Е.В., РГППУ, 201030

Page 31: принципы ооп и программирование классов в C#

конструктор с пустыми полями

Болгарина Е.В., РГППУ, 201031

Page 32: принципы ооп и программирование классов в C#

Обращение к закрытым полям класса.

Болгарина Е.В., РГППУ, 201032

Принцип сокрытия информации (инкапсуляция) предоставляет программе минимум информации по работе с классом.

Изменение полей класса возможно только через использование методов самого класса.

Создадим открытые, т.е. доступные программе методы по управлению полями класса Person:

Метод изменения зарплаты change_salary;

Метод вывода возраста get_age;

Page 33: принципы ооп и программирование классов в C#

Болгарина Е.В., РГППУ, 201033

Page 34: принципы ооп и программирование классов в C#

Болгарина Е.В., РГППУ, 201034

Page 35: принципы ооп и программирование классов в C#

Болгарина Е.В., РГППУ, 201035

Page 36: принципы ооп и программирование классов в C#

Лабораторная работа

Индивидуальные задания:

Болгарина Е.В., РГППУ, 201036

1.Описать класс Aeroflot, содержащую закрытые поля: название пункта назначения рейса, номер рейса, тип самолета.Описать конструкторы без параметров и с различным числом параметров.Описать открытые методы Вывод информации, Замена номера рейса.Создать несколько объектов (не менее 3х) и продемонстрировать работу созданных методов.

2. Описать класс Price, содержащий следующие поля: название товара, название магазина, в котором продается товар, количество товара, стоимость единицы товара.Описать конструкторы без параметров и с различным числом параметров.Описать открытые методы Вывод информации, Замена стоимости товара.Создать несколько объектов (не менее 3х) и продемонстрировать работу созданных методов.Определить общую стоимость товара в определенном магазине.