02 oop

25
ООП

Upload: eleksdev

Post on 10-May-2015

243 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: 02 OOP

ООП

Page 2: 02 OOP

• “Лінійне”• “Процедурне”• “Модульне”• Об’єктне

Програмування

Page 3: 02 OOP

Поняття ООП

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

Page 4: 02 OOP

Об’єкт

• Об’єкт чітко характеризує себе• Любий елемент програми можна

представити як об’єкт

Page 5: 02 OOP

Клас

• Об’єкт – це екземпляр класа• Клас – описує структуру і поведінку

class MyClass {

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

}

var myClass = new MyClass();

Page 6: 02 OOP

Клас

Page 7: 02 OOP

Основи ООП

• Абстрагування• Інкапсуляція• Наслідування• Поліморфізм

Page 8: 02 OOP

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

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

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

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

спідометра

Page 9: 02 OOP

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

• Об’єднання полів і методів• Приховування реалізації• Захист даних

Page 10: 02 OOP

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

class Car     {         public float consumptionPerKm = 0.9f;

        public float AcessibleDistance(int fuelAmount)

        {             return fuelAmount / consumptionPerKm;         }     }

Page 11: 02 OOP

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

Модифікатори доступу:• public• protected• private• internal• protected internal

Page 12: 02 OOP

Інкапсуляція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 13: 02 OOP

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

Page 14: 02 OOP

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

Page 15: 02 OOP

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

class AutomaticCar: Car     {         public void EnableAutomatic(bool enable)         {             // additional changes

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

Page 16: 02 OOP

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

Page 17: 02 OOP

Інтерфейс

interface ICar     {         float AccessibleDistance(int fuelAmount);         void Accelerate(int value);         void Break(int value);     }

Page 18: 02 OOP

Інтерфейсclass SimpleCar : ICar     {         public float AccessibleDistance(int fuelAmount)         {             return 0.0f;         }

        public void Accelerate(int value)         {             //

}

        public void Break(int value)         {             //

}     }

Page 19: 02 OOP

Віртуальні функції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;         }     }

Page 20: 02 OOP

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

abstract class NewPrototypeCar: Car     {         public abstract void HideLicensePlate();     }

class BondCar: NewPrototypeCar     {         public override void HideLicensePlate()         {             //

}     }

Page 21: 02 OOP

Поліморфізм

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

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

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

Page 22: 02 OOP

Поліморфізм

Page 23: 02 OOP

Поліморфізм 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 24: 02 OOP
Page 25: 02 OOP