Nesne Yönelimli Programlamanın dördüncü ve son temel prensibi olan polymorphism yani çok biçimlilik konusuna bakacağız. Öncekilerde olduğu gibi gerçek hayat ve kod örnekleri ile anlatmaya çalışacağım.

4-Polymorphism

Yunanca poly, çok; morph ise 'değişik biçimde' benzeri bir anlama gelir. Yani bu prensip bir metodun ayrı nesneler için farklı şekillerde kullanılabilmesini sağlar.

O kadar basit düşünüyoruz ki örneğimizde bir araba, bir tekne ve bir uçağın ortak metotları, çalıştırılması ve ilerlemesi olarak düşünüyoruz. Araba otobanda, tekne denizde, uçak pistte ilerliyor ve sonrasında hızlanan bir arabaya kanat takarsak uçuyor, bir omurga gövde eklersek yüzüyor.😂

Modellemeler olası en sade ve basit şekilde tutulmuştur.

namespace GurkanTuna.Polymorphism {  

    interface IVehicle {
        string Start();
    }

    abstract class VehicleBase : IVehicle {

        public abstract string Move();

        public string Start() {
            return $"The {this.GetType().Name} is started";
        }
    }

    interface IFlyable {
        string Fly();
    }

    interface ISwimmable {
        string Swim();
    }


    class Car : VehicleBase {
        public override string Move() {
            return $"The {this.GetType().Name} is moving on the highway";
        }
    }

    class Boat : VehicleBase, ISwimmable {
        public override string Move() {
            return $"The {this.GetType().Name} is moving in the sea";
        }

        public string Swim() {
            return $"The {this.GetType().Name} is swimming...";
        }
    }

    class Plane : VehicleBase, IFlyable {
        public string Fly() {
            return $"The {this.GetType().Name} is flying...";
        }

        public override string Move() {
            return $"The {this.GetType().Name} is moving on the runway";
        }
    }

    class UI {
        static void Main() {
            var car = new Car();
            var boat = new Boat();
            var plane = new Plane();

            Console.WriteLine($"{car.Start()}\n{boat.Start()}\n{plane.Start()}\n");            
            Console.WriteLine($"{car.Move()}\n{boat.Move()}\n{plane.Move()}\n");
            Console.WriteLine($"{boat.Swim()}\n{plane.Fly()}");

            Console.Read();
        }
    }
}

Nesne Yönelimli Programlama (OOP) Temel Prensipleri 1 - EncapsulationNesne Yönelimli Programlama (OOP) Temel Prensipleri 2 - InheritanceNesne Yönelimli Programlama (OOP) Temel Prensipleri 3 - Abstraction