static void Main(string[] args) { //Bunlar şubedeki arkadaşın secebileceği kredi seçenekleri ICreditManager ihtiyacKrediManager = new İhtiyacKrediManager(); //İnterfaceler, o interfaceyi implemente eden classin referans numarasını tutabilir. ICreditManager mortgageCreditManager = new MortgageCreditManager(); ICreditManager transportCreditManager = new TransportCreditManager(); CreditApplicationManager creditApplicationManager = new CreditApplicationManager(); DatabaseLoggerService databaseLoggerService = new DatabaseLoggerService(); //aslında alternatif olarak alt satırdaki kodda parametreye "new DatabaseLoggerService()" girilebilir. creditApplicationManager.BasvuruYap(ihtiyacKrediManager, databaseLoggerService); //çıktı ihtiyac kredisi hesaplandı! //ICreditManager'de bir veri tipidir. List <ICreditManager> credits = new List <ICreditManager>() { ihtiyacKrediManager, mortgageCreditManager, transportCreditManager }; Console.WriteLine("Liste tipinde birden çok kredi türünü hesaplama!: "); creditApplicationManager.CreditPreNotification(credits); Console.WriteLine("---------------------"); MortgageCreditManager mortgageCreditManager1 = new MortgageCreditManager(); creditApplicationManager.BasvuruYap(mortgageCreditManager1, new FileLoggerService()); }
static void Main(string[] args) { //ConsumerLoanManager consumerLoanManager = new ConsumerLoanManager(); //consumerLoanManager.Calculate(); //VehicleLoanManager vehicleLoanManager = new VehicleLoanManager(); //vehicleLoanManager.Calculate(); //MortgageLoanManager mortgageLoanManager = new MortgageLoanManager(); //mortgageLoanManager.Calculate(); //Interfaceler diger classlardaki inherite olabilir. Cunku tum kredi hesaplama yontemlerinde miras almistir. //ILoanBaseManager consumerLoanManager1 = new ConsumerLoanManager(); //consumerLoanManager1.Calculate(); //ILoanBaseManager vehicleLoanManager1 = new VehicleLoanManager(); //vehicleLoanManager1.Calculate(); //ILoanBaseManager mortgageLoanManager1 = new MortgageLoanManager(); //mortgageLoanManager1.Calculate(); ILoanBaseManager consumerLoanManager2 = new ConsumerLoanManager(); ILoanBaseManager vehicleLoanManager2 = new VehicleLoanManager(); ILoanBaseManager mortgageLoanManager2 = new MortgageLoanManager(); ILoanBaseManager tradesmanLoanManager2 = new TradesmanLoanManager(); ILoggerService databaseLoggerService = new DatabaseLoggerService(); ILoggerService fileLoggerService = new FileLoggerService(); ILoggerService smsLoggerService = new SmsLoggerService(); List <ILoggerService> services = new List <ILoggerService>() { databaseLoggerService, smsLoggerService }; CreditApplicationManager creditApplicationManager = new CreditApplicationManager(); //creditApplicationManager.CreditApplication(consumerLoanManager2, databaseLoggerService); creditApplicationManager.CreditApplication(tradesmanLoanManager2, services); List <ILoanBaseManager> loans = new List <ILoanBaseManager>() { consumerLoanManager2, vehicleLoanManager2, mortgageLoanManager2 }; //creditApplicationManager.ProvideCreditPreNotification(loans); //Interfaceleri birbirinin alternatifi olan ama kod icerikleri birbirinden farkli olan durumlar icin kullaniriz. //Bu yaptigimiz ornekte tum krediler hesaplama ortak bir nokta vardir. Ancak kodlari farkli kurallari vardir. //Kredinin turlerine hesaplama turleri degiskenlik gosterir. }
static void Main(string[] args) { ConsumerLoan consumerLoan = new ConsumerLoan(); VehicleLoan vehicleLoan = new VehicleLoan(); ICreditManager dwellingCredit = new DwellingCredit(); CreditApplicationManager creditApplicationManager = new CreditApplicationManager(); creditApplicationManager.GetApplication(consumerLoan, new DatabaseLoggerService()); List <ICreditManager> credits = new List <ICreditManager>() { consumerLoan, dwellingCredit }; //creditApplicationManager.CreditEvaluation(credits); }
static void Main(string[] args) { IBankCreditManager carCreditManager = new CarCreditManager(); IBankCreditManager houseCreditManager = new HouseCreditManager(); IBankCreditManager personelFinanceCreditManager = new PersonalFinanceCreditManager(); ILoggerService databaseLoggerService = new DatabaseLoggerService(); ILoggerService fileLoggerService = new FileLoggerService(); ILoggerService smsLoggerService = new SmsLoggerService(); List <ILoggerService> loggers = new List <ILoggerService>() { databaseLoggerService, fileLoggerService, smsLoggerService }; CreditApplicationManager creditApplicationManager = new CreditApplicationManager(); creditApplicationManager.CreditApplication(personelFinanceCreditManager, loggers); List <IBankCreditManager> bankCreditManagers = new List <IBankCreditManager>() { personelFinanceCreditManager, carCreditManager, houseCreditManager }; //creditApplicationManager.GetCreditInformation(bankCreditManagers); }
static void Main(string[] args) { //---------INTERFACES-----------//----------POLIMORFISM-----------// // Yıldızlı not - Interface'leri birbirinin alternatifi olan ama kod içerikleri farklı olan durumlar için kullanırız! // Interface'ler de o interface'i implemente eden class'ı ve yani referansını tutabiliyorlar. // Loglama - kim ne zaman hangi operasyonu çağırdı; sistemde olan hareketlerin dökümüdür. Veri tabanı, dosya, sms, mail olarak tutulabilir. // Mesela Log için de interface kullanılır. Farklı tutma yolları için. //- PersonalFinanceCreditManager ihtiyacKrediManager = new PersonalFinanceCreditManager(); //- ihtiyacKrediManager.Calculate(); //- TransportCreditManager tasitKrediManager = new TransportCreditManager(); //- tasitKrediManager.Calculate(); //- MortgageLoanManager konutKrediManager = new MortgageLoanManager(); //- konutKrediManager.Calculate(); // Bu şekilde ekrana kredilerin içindeki kodu yazdıracaktır. // Ancak önemli nokta şudur ki: //- ICreditManager ihtiyacKredisiManager = new PersonalFinanceCreditManager(); //- ihtiyacKredisiManager.Calculate(); // Hepsi interface'imizi kullanarak da aynen çalışabilir. // // //---------------------CreditApplicationManager düzenledikten sonra ise şunu yaptık----------------------// ICreditManager konutKrediManager = new MortgageLoanManager(); ICreditManager ihtiyacKrediManager = new PersonalFinanceCreditManager(); ICreditManager tasitKrediManager = new TransportCreditManager(); // Bunların ekrandaki açılır kutu ve seçenekleri olduğunu düşünelim. ILoggerService databaseLoggerService = new DatabaseLoggerService(); // bunları da oluşturduğumuz için sonradan newledik. ILoggerService fileLoggerService = new FileLoggerService(); // ILoggerService smsLoggerService = new SmsLoggerService(); // bunlar üç loglama alternatifi // Birden fazla loglama için liste, şimdi aşağıda başvuru yerinin ikinci parametresi loggers yapmak yeterli olacak. List <ILoggerService> loggers = new List <ILoggerService> { fileLoggerService, databaseLoggerService, smsLoggerService }; // neleri istersek ekleriz. CreditApplicationManager creditApplicationManager = new CreditApplicationManager(); creditApplicationManager.MakeAnApplication(tasitKrediManager, loggers); // databaseLogger ve fileLogger oluşturunca istedi, parametreye ekledik // Yukarıda ise kullanıcının kredilerden birini seçtiğini, bu seçim ile de üstteki parametreye o seçimin eklendiğini düşünelim. // Bu kod kredi başvuru class'ına gider ve orada da taşıt kredisi atandığı için taşıt kredisi class'ının hesaplaması çalışır. // Bu yüzden de ekrana sadece Taşıt kredisi ödeme planı hesaplandı yazar. // Soyutlama yani bu OOP3 Projesinde anlatılanlar son derece önemlidir. İşe kabul ettirecek bilgilerdir. // Kredi ön bilgilendirmesi yap kısmından sonra buraya geldik. Orada parametre içine sayısı belirsiz olduğu için List yapmıştık. List <ICreditManager> krediler = new List <ICreditManager>() { tasitKrediManager, ihtiyacKrediManager }; // süslü parantezlerin içi: müşterinin bilgi almak istediği kredilerden seçtiğini varsayalım. //- creditApplicationManager.GiveCreditPreInformation(krediler); // krediönbilgilendirmesiyap(kredilerden) demek. // yeni kredi oluşturmamız istendi diyelim, esnaf kredisi gibi. SOLID'in O harfi (sisteme yeni özellik eklendiğinde sistem bozulmaz) // yeni class'ı ekleriz hesapla kısmını simüle ederiz. // Başvuru kodunun (yukarda) ilk parametresini new EsnafKredisiManager() yaparız. ( ya da orada new'lemek yerine diğerleri gibi üzerinde instence yaparız.) // ayın şey loglama için de geçerli. artık sms de yollayalım dedik. smsLoggerService class'ı oluşturduk. // :ILoggerService ekleyip implement edip public void Log() { cw( "sms yollandı" ) } deriz. // Program cs kısmında başvuru ikinci parametresini new smsLoggerService() yapar ya da diğerleri gibi üstte new'leriz. (alternatif yollardır) // Bu yaptıklarımız Polimorfizmdir. }
static void Main(string[] args) { // Interface*** // Kredilerin instancelarını oluştuşma //PersonalFinanceCreditManager personalFinanceCreditManager = new PersonalFinanceCreditManager(); //personalFinanceCreditManager.CalculateCredit(); //VehicleCreditManager vehicleCreditManager = new VehicleCreditManager(); //vehicleCreditManager.CalculateCredit(); //HousingCreditManager housingCreditManager = new HousingCreditManager(); //housingCreditManager.CalculateCredit(); //--------------------------------------- // Interface'lerde interface'i implement eden sınıfların referans numarasını tutabilir. // Inheritance'taki gibi. // Ekran seçimleri olarak düşün. ICreditManager personalFinanceCreditManager = new PersonalFinanceCreditManager(); //personalFinanceCreditManager.CalculateCredit(); ICreditManager vehicleCreditManager = new VehicleCreditManager(); //vehicleCreditManager.CalculateCredit(); ICreditManager housingCreditManager = new HousingCreditManager(); //housingCreditManager.CalculateCredit(); //Başvuru yapma: CreditApplicationManager creditApplicationManager = new CreditApplicationManager(); // Bir KrediManager istiyor. //creditApplicationManager.Apply(housingCreditManager); //Hata verdi, logger eksik! // İki yol: //creditApplicationManager.Apply(housingCreditManager, new FileLoggerService()) ILoggerService databaseLoggerService = new DatabaseLoggerService(); ILoggerService fileLoggerService = new FileLoggerService(); //creditApplicationManager.Apply(housingCreditManager, fileLoggerService); // Başvuru yap konut kredisine göre ve loglamayı dosyaya yapacak şekilde demektir. // Bu yazılımda sürdürülebilirliği sağlar! Console.WriteLine("------------------------------------------------"); // ICreditManager bir interface, new'lenemez, verilemez! /* ICreditManager'ı implemente eden Ev,Taşıt,İhtiyaç KrediManagerlarından * hangisi istenirse gönderebiliriz. * Gönderilen KrediManager'a göre de başvur metodunda bulunan hesaplama * operasyonu KrediManager'ın kendi hesaplama operasyonuna denk gelir. */ // housingCreditManager seçildiği için Ev Kredisi'nin Hesapla kuralı, metodu çalışır. // Some kind of Mülakat Question :)))) /* Kredi çekmek isteyen Müşteri için uygun kredileri seçip, * Parametre olarak bir Liste yollanır. Listeyi alan metot * listeyi dönerek bilgilendirme yapar. */ //Bilgilendirme için kredi seçimi/kredi listesi seçimi ve bilgilendirme yapılması: List <ICreditManager> credits = new List <ICreditManager>() { personalFinanceCreditManager, vehicleCreditManager }; creditApplicationManager.CreditPriorInfo(credits); // SOLID'in O'su: Open for extension, Close for modification. // Yeni bir özellik eklenirse mevcut kodlar bozulmaz! // Esnaf Kredisi ekleyelim. Console.WriteLine("---------------------------------"); ICreditManager tradesmanCreditManager = new TradesmanCreditManager(); creditApplicationManager.Apply(tradesmanCreditManager, new List <ILoggerService> { new DatabaseLoggerService(), new SmsLoggerService() }); //Liste yapıpta yollayabilirdik ama yukarıdaki gibide yollanabilir. Console.WriteLine("---------------------------------"); // Yeni bir Loglama yöntemi eklenilmesi istensin. // Sms Loglaması ekleyelim. //creditApplicationManager.Apply(tradesmanCreditManager, new SmsLoggerService()); ILoggerService smsLoggerService = new SmsLoggerService(); //creditApplicationManager.Apply(tradesmanCreditManager, smsLoggerService); creditApplicationManager.Apply(tradesmanCreditManager, new List <ILoggerService> { new SmsLoggerService() }); // Yapılanların hepsi polymorphism örneğidir. Console.WriteLine("---------------------------------"); List <ILoggerService> loggerServices = new List <ILoggerService> { new SmsLoggerService(), new DatabaseLoggerService(), new FileLoggerService() }; creditApplicationManager.Apply(housingCreditManager, loggerServices); }