#2 Об'єктно орієнтоване програмування (ч. 1)
Post on 04-Jul-2015
2.038 Views
Preview:
TRANSCRIPT
ООП
Поняття ООП
• Програма – це сукупність об’єктів
• Все є об’єктом
Об’єкт
• Об’єкт чітко характеризує себе
• Любий елемент програми можна представити як об’єкт
Клас
• Об’єкт – це екземпляр класа
• Клас – описує структуру і поведінку
class MyClass{
// Methods// Properties// Fields// Delegates, …
}
Основи ООП
• Абстрагування
• Інкапсуляція
• Наслідування
• Поліморфізм
Абстрагування
• Підкреслення суттєвих деталей
• Упущення несуттєвих
Суттєво• Максимальна швидкість• Розхід палива• Ціна
Не суттєво• Оббивка салону• Панель приборів
Інкапсуляція
• Обєднання полів і методів
• Приховування реалізації
• Захист даних
Інкапсуляція
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) {
fuelAmount = fuelAmount / 2; // broken-down 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() { } }
top related