Esempio n. 1
0
        static void Main(string[] args)
        {
            IWorker[] workers = new IWorker[3]
            {
                new Managaer(),                        // bu yolla bir nesneye atama yapmadan kullanabileceğimiz çalışma işlemi başlattık.
                new Worker(),
                new Robot()
            };

            foreach (var worker in workers)
            {
                worker.Work();                        // Manager,Worker,Robot interface den impemente ettikleri work metodunu kendi içlerinde çalıştırır.
            }


            IEat[] eats = new IEat[2]
            {
                new Managaer(),
                new Worker()                        // Robot tanımlanamaz çünkü robot class'ını IEat interface ne implemente etmedik.
            };


            foreach (var eat in eats)
            {
                eat.Eat();
            }
        }
Esempio n. 2
0
        static void Main(string[] args)
        {
            //Bir Şirkette 3 tip çalışan var: işciler yöneticiler Robotlar bir class birden fazla interface implamantation yapılabilir.
            IWorker[] workers = new IWorker[3]
            {
                new Manager(),
                new worker(),
                new Robot()
            };
            foreach (var worker in workers)
            {
                worker.Work();
            }

            IEat[] eats = new IEat[2]
            {
                new worker(),
                new Manager()
            };
            foreach (var eat in eats)
            {
                eat.Eat();
            }
            Console.ReadKey();
        }
Esempio n. 3
0
        static void Main(string[] args)
        {
            IWorker[] workers = new IWorker[3]
            {
                new Manager(),
                new Worker(),
                new Robot()
            };

            foreach (var worker in workers)
            {
                worker.Work();
            }

            IEat[] eats = new IEat[2]
            {
                new Manager(),
                new Worker()
            };

            foreach (var eat in eats)
            {
                eat.Eat();
            }
        }
Esempio n. 4
0
 static void Main(string[] args)
 {
     IWorker[] workers = new IWorker[3]
     {
         new Worker(),
         new Robot(),
         new Manager()
     };
     foreach (IWorker worker in workers)
     {
         worker.Work();
     }
     IEat[] eats = new IEat[2]
     {
         new Worker(),
         new Manager()
     };
     foreach (IEat eat in eats)
     {
         eat.Eat();
     }
     IGetSalary[] getSalary = new IGetSalary[2]
     {
         new Worker(),
         new Manager()
     };
     foreach (IGetSalary getSalarys in getSalary)
     {
         getSalarys.GetSalary();
     }
     Console.ReadKey();
 }
Esempio n. 5
0
        static void Main(string[] args)
        {
            IWorker[] worker = new IWorker[3]
            {
                new Worker(),
                new Manager(),
                new Robot()
            };

            foreach (var wrks in worker)
            {
                wrks.Work();
            }


            IEat[] eats = new IEat[2]
            {
                new Manager(),
                new Worker()
            };

            foreach (var eat in eats)
            {
                eat.Eat();
            }

            Console.ReadLine();
        }
Esempio n. 6
0
        static void Main(string[] args)
        {
            //C# method is Invariant
            MusicCreater mu1 = musicCreater;
            //MetalCreater me1 = mu1;
            MetalCreater me2 = metalCreater;
            //MusicCreater mu2 = me2;

            //Convariance
            //Creater<Music> mu3 = musicCreater;
            //Creater<Metal> me3 = mu3;//get music include metal or classic or pop NG
            Creater <Metal> me4 = metalCreater;
            Creater <Music> mu4 = me4;       //get metal, metal is music

            MusicCreater mu5 = metalCreater; // (out is not nessary)
            //MetalCreater me5 = musicCreater;

            CreaterClass <Metal> me6    = new CreaterClass <Metal>();
            ICreate <Music>      imusic = me6;
            //CreaterClass<Music> mu6 = new CreaterClass<Music>();
            //ICreate<Metal> imetal = mu6;

            //Contravariance
            //Eater<Bamboo> ba1 = x => { };
            //Eater<Food> fo1 = ba1;   // dispose food, not only bamboo but also other thing is food too
            Eater <Food>   fo2 = x => { };
            Eater <Bamboo> ba2 = fo2; // dispose bamboo, bamboo is food

            //EaterClass<Bamboo> ba3 = new EaterClass<Bamboo>();
            //IEat<Food> ifood = ba3;
            EaterClass <Food> fo3     = new EaterClass <Food>();
            IEat <Bamboo>     ibamboo = fo3;
        }
Esempio n. 7
0
 static void Main(string[] args)
 {
     IEat[] eats = new IEat[2]
     {
         new Manager(),
         new Worker()
     };
     foreach (var eat in eats)
     {
         eat.Eat();
     }
 }
Esempio n. 8
0
        public virtual void ToEat(IEat eat)
        {
            if (AnimalState == AnimalState.Dead || IsFeedUp)
            {
                return;
            }

            eat.EatState = EatState.Eated;
            IsFeedUp     = true;

            LifeTimeWithoutEat = maxLifeTimeWithoutEat;
            TimeToHunger       = maxTimeToHunger;
        }
Esempio n. 9
0
 static void AtCafetearea(IEat worker)
 {
     Console.WriteLine("At Cafeate Area!");
     try
     {
         worker.StartEat();
         worker.StopEat();
     }
     catch (Exception e)
     {
         Console.WriteLine("Message:" + e.Message);
     }
 }
Esempio n. 10
0
        static void Main(string[] args)
        {
            IWorker[] workers = new IWorker[3]
            {
                new Manager(),
                new Worker(),
                new Robot()
            };

            IEat[] eats = new IEat[2]
            {
                new Manager(),
                new Worker()
            };
        }
Esempio n. 11
0
        static void Main(string[] args)
        {
            int count = 6;
            IEat[] eats = new IEat[count];
            for (int i = 0; i < count / 2; i++)
            {
                eats[i] = new Mushroom((Mushroom.Mushrooms) i);
                eats[i + count/2] = new Berry((Berry.Berries) i);
            }

            foreach (var eat in eats)
            {
                Console.WriteLine("{0} is {1}", eat.ToString(), eat.Eat());
            }

            Console.ReadLine();
        }
Esempio n. 12
0
 static void Main(string[] args)
 {
     IWorker[] workers = new IWorker[] { new Manager(), new Worker(), new Robot() };
     foreach (var worker in workers)
     {
         worker.Work();
     }
     IEat[] eats = new IEat[] { new Manager(), new Worker() };
     foreach (var eat in eats)
     {
         eat.Eat();
     }
     IGetSalary[] getSalary = new IGetSalary[] { new Manager(), new Worker() };
     foreach (var salary in getSalary)
     {
         salary.GetSalary();
     }
 }
Esempio n. 13
0
        static void Main(string[] args)
        {
            //SOLID
            //Interface Segregation
            IWorker[] workers = new IWorker[] { new Manager(), new Worker(), new Robot() };

            foreach (IWorker worker in workers)
            {
                worker.Work();
            }

            IEat[] eats = new IEat[] { new Worker(), new Manager() };

            foreach (IEat eat in eats)
            {
                eat.Eat();
            }
        }
Esempio n. 14
0
        static void Main(string[] args)
        {
            IWorker[] workers = new IWorker[]   //müdür , çalışan ve robot çalışır
            {
                new Worker(),
                new Manager(),
                new Robot()
            };
            foreach (var worker in workers)
            {
                worker.Work();  //tüm çalışanlar çalışsın
            }

            IEat[] eats = new IEat[]     //robot yemez
            {
                new Manager(),
                new Worker()    //robot gelmez çünkü yemez IEat olarak tanımlamadık.
            };
        }
Esempio n. 15
0
        static void Main(string[] args)
        {
            //SOLID => Interface Segregation

            IWorker[] workers = new IWorker[]
            {
                new Manager(),
                new Worker(),
                new Robot()
            };


            foreach (var worker in workers)
            {
                worker.Work();
            }


            IEat[] eats = new IEat[]
            {
                new Manager(),
                new Worker()
            };

            foreach (var eat in eats)
            {
                eat.Eat();
            }


            ISalary[] salaries = new ISalary[]
            {
                new Manager(),
                new Worker()
            };

            foreach (var salary in salaries)
            {
                salary.GetSalary();
            }

            Console.ReadLine();
        }
Esempio n. 16
0
        static void Main(string[] args)
        {
            IWorker[] workers = new IWorker[3]
            {
                new Manager(),
                new Worker(), //çalışma emrini bütün çalışanlara verdik.
                new Robot(),
            };

            foreach (var worker in workers)
            {
                worker.Work();
            }

            IEat[] eats = new IEat[2]
            {
                new Manager(),
                new Worker(),    // yeme emrini robotlar hariç hepsine verdik.
            };
        }
Esempio n. 17
0
        static void Main(string[] args)
        {
            IWorker[] workers = new IWorker[3]
            {
                new Manager(),
                new Worker(),
                new Robot()
            };

            foreach (var worker in workers)
            {
                worker.Work();
            }

            IEat[] eat = new IEat[2]
            {
                new Manager(),
                new Worker()
                //new Robot() tanımlı değil
            };
        }
Esempio n. 18
0
        static void Main(string[] args)
        {
            IWorker[] workers = new IWorker[3]
            {
                new Manager(),
                new Worker(),
                new Robot(),
            };

            foreach (var worker in workers)
            {
                worker.Work();
            }

            IEat[] eats = new IEat[]
            {
                new Manager(),
                new Worker(),
                // new Robot(), eat içinde tanımlı olmadığından çağırılamaz.
            };
        }
Esempio n. 19
0
        static void Main(string[] args)
        {
            IWorker[] workers = new IWorker[]
            {
                new Worker(),
                new Manager(),
                new Robot(),
            };

            foreach (var worker in workers)
            {
                worker.Work();
            }

            Console.WriteLine("---------------------------");

            IEat[] eats = new IEat[]
            {
                new Manager(),
                new Worker(),
            };

            foreach (var eat in eats)
            {
                eat.Eat();
            }

            Console.WriteLine("---------------------------");

            ISalary[] salaries = new ISalary[]
            {
                new Manager(),
                new Worker(),
            };

            foreach (var salary in salaries)
            {
                salary.GetSalary();
            }
        }
Esempio n. 20
0
        static void Main(string[] args)
        {
            Console.ReadLine();

            IWorker[] workers = new IWorker[3]
            {
                new Manager(),
                new Worker(),
                new Robot()
            };

            foreach (var worker in workers)
            {
                worker.Work();
            }

            IEat[] eats = new IEat[2]
            {
                new Worker(),
                new Manager()
            };
        }
Esempio n. 21
0
 /*Bilgi; Bir class birden fazla interface implamente edebiliri. Bunu kullanma nedenimiz bazı classların bazı interface
  * araçlarına ihtiyaç duymamasıdır. Örneğin 1 robot yemek yiyemez.*/
 public static void InterfaceImplamente()
 {
     IWorker[] workers = new IWorker[3]
     {
         new Worker(),
         new Manager(),
         new Robot()
     };
     foreach (var worker in workers)
     {
         worker.Work();
     }
     IEat[] eats = new IEat[2]
     {
         new Worker(),
         new Manager()
     };
     foreach (var eat in eats)
     {
         eat.Eat();
     }
 }
        static void Main(string[] args)
        {
            IWorker[] workers = new IWorker[3]
            {
                new Worker(),
                new Manager(),
                new Robot()
            };

            IEat[] eaters = new IEat[2]
            {
                new Worker(),
                new Manager()
            };


            IGetSalary[] salaries = new IGetSalary[2]
            {
                new Worker(),
                new Manager()
            };
        }
Esempio n. 23
0
 static void Main(string[] args)
 {
     //interface lerin doğru planlanması
     IWorker[] workers = new IWorker[3]
     {
         new Manager(),
         new Worker(),
         new Robot()
     };
     foreach (var worker in workers)
     {
         worker.Work();
     }
     IEat[] eats = new IEat[2]
     {
         new Manager(),
         new Worker()
     };
     foreach (var eat in eats)
     {
         eat.Eat();
     }
 }
Esempio n. 24
0
        static void Main(string[] args)
        {
            IWorker[] workers = new IWorker[]
            {
                new Manager(),
                new Worker(),
                new Robot()
            };

            foreach (var worker in workers)
            {
                worker.Work();
            }

            IEat[] eats = new IEat[] { new Worker(), new Manager() };
            // SOLID
            //Single responsibility principle: Bir sınıfın yapması gereken yalnızca BİR işi olması gerekir.
            //Open/closed principle: Bir sınıf davranışını değiştirmemeli ve yeni özellikle kazanabiliyor olmalıdır.
            //Liskov substitution principle: Kodlarda bir değişiklik yapmadan alt sınıfları üst sınıfların yerine kullanabilmeliyiz.
            //Interface segregation principle: Sorumlulukları tek bir arayüze toplamak yerine birden fazla arayüz oluşturmalıyız.
            //Dependency inversion principle: Sınıflar arası bağımlılık az olmalı, özellikle üst seviye sınıflar alt seviyelere bağımlı olmamalı.
            Console.WriteLine("Hello World!");
        }
Esempio n. 25
0
        static void Main(string[] args)
        {
            IWorker[] workers = new IWorker[3]
            {
                new Manager(),
                new Worker(),
                new Robot()
            };
            foreach (var worker in workers)
            {
                worker.Work(); // Tüm personle "work" emri verilmiş oluyor.
            }

            Console.WriteLine(" ");

            IEat[] eats = new IEat[2]
            {
                new Worker(),
                new Manager()
            };
            foreach (var eat in eats)
            {
                eat.Eat();
            }

            Console.WriteLine(" ");

            ISalary[] salaries = new ISalary[2]
            {
                new Worker(),
                new Manager()
            };
            foreach (var salary in salaries)
            {
                salary.GetSalary();
            }
        }
Esempio n. 26
0
        static void Main(string[] args)
        {
            IWorker[] workers = new IWorker[3]
            {
                new Manager(),
                new Worker(),
                new Robot()
            };

            foreach (var item in workers)
            {
                item.Work();
            }

            IEat[] eats = new IEat[2]
            {
                new Manager(),
                new Worker()
            };

            foreach (var item2 in eats)
            {
                item2.Eat();
            }


            ISalary[] salaries = new ISalary[2]
            {
                new Manager(),
                new Worker()
            };

            foreach (var item3 in salaries)
            {
                item3.GetSalary();
            }
        }
Esempio n. 27
0
 static void Main(string[] args)
 {
     //List<IWorker> workers = new List<IWorker> { new Manager(),new Worker(),new Robot()};
     IWorker[] workers = new IWorker[3]
     {
         new Manager(),
         new Worker(),
         new Robot()
     };
     foreach (var worker in workers)
     {
         worker.Work();
     }
     IEat[] eats = new IEat[2]
     {
         new Worker(),
         new Manager()
     };
     foreach (var eat in eats)
     {
         eat.Eat();
     }
     Console.ReadLine();
 }
Esempio n. 28
0
        /*
         *
         *       interfacenin doğru planması gerektiğini söyleyen S O L I D 'in "I" harfini yaptık.
         * Yazılım geliştirmenin 5 temel prensibi vardır S O L I D
         *       S — Single-responsibility principle
         * ÖZET: Bir sınıf (nesne) yalnızca bir amaç uğruna değiştirilebilir, o da o sınıfa yüklenen sorumluluktur, yani bir sınıfın(fonksiyona da indirgenebilir) yapması gereken yalnızca bir işi olması gerekir.
         *       O — Open-closed principle
         * ÖZET: Bir sınıf ya da fonksiyon halihazırda var olan özellikleri korumalı ve değişikliğe izin vermemelidir. Yani davranışını değiştirmiyor olmalı ve yeni özellikler kazanabiliyor olmalıdır.
         *        L — Liskov substitution principle
         * ÖZET: Kodlarımızda herhangi bir değişiklik yapmaya gerek duymadan alt sınıfları, türedikleri(üst) sınıfların yerine kullanabilmeliyiz.
         *        I — Interface segregation principle
         * ÖZET: Sorumlulukların hepsini tek bir arayüze toplamak yerine daha özelleştirilmiş birden fazla arayüz oluşturmalıyız.
         *        D — Dependency Inversion Principle
         * ÖZET: Sınıflar arası bağımlılıklar olabildiğince az olmalıdır özellikle üst seviye sınıflar alt seviye sınıflara bağımlı olmamalıdır.
         *
         */
        static void Main(string[] args)
        {
            IWorker[] workers = new IWorker[3]
            {
                new Worker(),
                new Manager(),
                new Robot()
            };
            foreach (var worker in workers)
            {
                worker.Work();
            }

            IEat[] eats = new IEat[2]
            {
                //burada robot gelmez çünkü biz robotu tanımlamadık!!!
                new Manager(),
                new Worker()
            };
            foreach (var eat in eats)
            {
                eat.Eat();
            }
        }
Esempio n. 29
0
        static void Main(string[] args)
        {
            //şirketin 3 tane çalışan olsun. işci, yönetici, robotlar hepsinin ortak özelliği worker olması. Ve ortak metotları Work,Eat,GetSalary
            // Fakat robot eat ve GetSalary olmaz. Bu yüzden Çoklu İmplementasyon yapmamız gerekti.

            Manager manager = new Manager();
            Worker  worker  = new Worker();
            Robot   robot   = new Robot();

            IWorker[] workers = new IWorker[3] {
                manager, worker, robot
            };
            foreach (var worker1 in workers)
            {
                worker1.Work();
            }
            IEat[] eats = new IEat[2] {
                manager, worker
            };
            foreach (var eat in eats)
            {
                eat.Eat();
            }
        }
Esempio n. 30
0
        static void Main(string[] args)
        {
            //SOLID - Interface Segregation
            IWorker[] workers = new IWorker[]
            {
                new Manager(),
                new Worker(),
                new Robot()
            };
            foreach (var item in workers)
            {
                item.Work();
            }

            IEat[] eats = new IEat[]
            {
                new Manager(),
                new Worker()
            };
            foreach (var item in eats)
            {
                item.Eat();
            }
        }
Esempio n. 31
0
        private static void MultiImplementationOfInterfaces()
        {
            // Bir şirket : işçiler, yöneticiler, robotlar
            IWorker[] workers = new IWorker[]
            {
                new Manager(),
                new Employee(),
                new Robot()
            };

            // Interfacelerin metodları tüm kullanıcıların kullanacağı şekilde doğru planlanmalıdır,
            // İçi boş veya kullanılmayan metodu olmamalıdır.
            // SOLID : Yazılım geliştirme prensipleridir.
            // I: Interface Aggregation -- şuanki örneğimiz
            // S: Single Responsibility
            // O: Open-closed
            // L: Liskow Substitution
            // D: Dependency Inversion

            foreach (var worker in workers)
            {
                worker.Work(); // Tüm personellere çalış emri verilmiş olur!
            }

            IEat[] eats = new IEat[]  //IEat interface'inin Robot implement etmediği için, kullanılamaz.
            {
                new Manager(),
                new Employee()
                //new Robot()
            };

            foreach (var eat in eats)
            {
                eat.Eat(); // Robot dışındaki tüm personellere yeme emri verilir.
            }
        }