#2 Об'єктно орієнтоване програмування (ч. 1)

20
ООП

Upload: victor-matyushevskyy

Post on 04-Jul-2015

2.036 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: #2 Об'єктно орієнтоване програмування (ч. 1)

ООП

Page 2: #2 Об'єктно орієнтоване програмування (ч. 1)

Поняття ООП

• Програма – це сукупність об’єктів

• Все є об’єктом

Page 3: #2 Об'єктно орієнтоване програмування (ч. 1)

Об’єкт

• Об’єкт чітко характеризує себе

• Любий елемент програми можна представити як об’єкт

Page 4: #2 Об'єктно орієнтоване програмування (ч. 1)

Клас

• Об’єкт – це екземпляр класа

• Клас – описує структуру і поведінку

class MyClass{

// Methods// Properties// Fields// Delegates, …

}

Page 5: #2 Об'єктно орієнтоване програмування (ч. 1)

Основи ООП

• Абстрагування

• Інкапсуляція

• Наслідування

• Поліморфізм

Page 6: #2 Об'єктно орієнтоване програмування (ч. 1)

Абстрагування

• Підкреслення суттєвих деталей

• Упущення несуттєвих

Суттєво• Максимальна швидкість• Розхід палива• Ціна

Не суттєво• Оббивка салону• Панель приборів

Page 7: #2 Об'єктно орієнтоване програмування (ч. 1)

Інкапсуляція

• Обєднання полів і методів

• Приховування реалізації

• Захист даних

Page 8: #2 Об'єктно орієнтоване програмування (ч. 1)

Інкапсуляція

class Car {

public float consumptionPerKm = 0.9f;

public float AcessibleDistance(int fuelAmount) {

return fuelAmount / consumptionPerKm; }

}

Page 9: #2 Об'єктно орієнтоване програмування (ч. 1)

Інкапсуляція

Модифікатори доступу:

• public

• protected

• private

• internal

• protected internal

Page 10: #2 Об'єктно орієнтоване програмування (ч. 1)

Інкапсуляція

class Car{

private float consumptionPerKm = 0.9f; private const float minConsumptionPerKm = 0.2f;

public float AccessibleDistance(int fuelAmount) {

return fuelAmount / consumptionPerKm; }

public void SetConsumptionPerKm(float consumption) {

consumptionPerKm = consumption > minConsumptionPerKm ? consumption : minConsumptionPerKm;

} }

Page 11: #2 Об'єктно орієнтоване програмування (ч. 1)

Наслідування

Page 12: #2 Об'єктно орієнтоване програмування (ч. 1)

Наслідування

class AutomaticCar: Car {

public void EnableAutomatic(bool enable) {

// additional changes

SetConsumptionPerKm(enable ? 1.1f : 0.9f); }

}

Page 13: #2 Об'єктно орієнтоване програмування (ч. 1)

Інтерфейс

interface ICar{

float AccessibleDistance(int fuelAmount); void Accelerate(int value); void Break(int value);

}

Page 14: #2 Об'єктно орієнтоване програмування (ч. 1)

Інтерфейс

class SimpleCar : ICar{

public float AccessibleDistance(int fuelAmount) {

return 0.0f; }

public void Accelerate(int value) {

// }

public void Break(int value) {

// }

}

Page 15: #2 Об'єктно орієнтоване програмування (ч. 1)

Віртуальні функції

class VirtualCar{

protected const float consumptionPerKm = 0.6f;

public virtual float AccessibleDistance(int fuelAmount) {

return fuelAmount / consumptionPerKm; }

}

class Tractor : VirtualCar{

public override float AccessibleDistance(int fuelAmount) {

fuelAmount = fuelAmount / 2; // broken-down tractor

return fuelAmount / consumptionPerKm; }

}

Page 16: #2 Об'єктно орієнтоване програмування (ч. 1)

Абстрактні класи і методи

abstract class NewPrototypeCar: Car {

public abstract void HideLicensePlate(); }

class BondCar : NewPrototypeCar{

public override void HideLicensePlate() {

// }

}

Page 17: #2 Об'єктно орієнтоване програмування (ч. 1)

Поліморфізм

• Один інтерфейс – багато реалізацій

ICar car1 = new SimpleCar(); ICar car2 = new SuperCar();

car1.Accelerate(1); car2.Accelerate(1);

Page 18: #2 Об'єктно орієнтоване програмування (ч. 1)

Поліморфізмclass A {

public virtual void DoWork() { } }

class B : A {

public override void DoWork() { } }

class C : B {

public sealed override void DoWork() { } }

class D : C {

public new void DoWork() { } }

Page 19: #2 Об'єктно орієнтоване програмування (ч. 1)
Page 20: #2 Об'єктно орієнтоване програмування (ч. 1)