02 oop
TRANSCRIPT
ООП
• “Лінійне”• “Процедурне”• “Модульне”• Об’єктне
Програмування
Поняття ООП
• Програма – це сукупність об’єктів• Все є об’єктом
Об’єкт
• Об’єкт чітко характеризує себе• Любий елемент програми можна
представити як об’єкт
Клас
• Об’єкт – це екземпляр класа• Клас – описує структуру і поведінку
class MyClass {
// Methods// Properties// Fields// Delegates, …
}
var myClass = new MyClass();
Клас
Основи ООП
• Абстрагування• Інкапсуляція• Наслідування• Поліморфізм
Абстрагування
• Підкреслення суттєвих деталей• Упущення несуттєвих
Суттєво• Максимальна швидкість• Розхід палива• Ціна
Не суттєво• Оббивка салону• Колір стрілки
спідометра
Інкапсуляція
• Об’єднання полів і методів• Приховування реалізації• Захист даних
Інкапсуляція
class Car { public float consumptionPerKm = 0.9f;
public float AcessibleDistance(int fuelAmount)
{ return fuelAmount / consumptionPerKm; } }
Інкапсуляція
Модифікатори доступу:• public• protected• private• internal• protected internal
Інкапсуляція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; } }
Інкапсуляція
Наслідування
Наслідування
class AutomaticCar: Car { public void EnableAutomatic(bool enable) { // additional changes
SetConsumptionPerKm(enable ? 1.1f : 0.9f); } }
Наслідування
Інтерфейс
interface ICar { float AccessibleDistance(int fuelAmount); void Accelerate(int value); void Break(int value); }
Інтерфейсclass SimpleCar : ICar { public float AccessibleDistance(int fuelAmount) { return 0.0f; }
public void Accelerate(int value) { //
}
public void Break(int value) { //
} }
Віртуальні функції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) { float realAmount = fuelAmount / 2.0f; // broken tractor
return fuelAmount / consumptionPerKm; } }
Абстрактні класи і методи
abstract class NewPrototypeCar: Car { public abstract void HideLicensePlate(); }
class BondCar: NewPrototypeCar { public override void HideLicensePlate() { //
} }
Поліморфізм
• Один інтерфейс – багато реалізацій
ICar car1 = new SimpleCar(); ICar car2 = new SuperCar();
car1.Accelerate(1); car2.Accelerate(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() { } }