YeniHarman hocam, Haklısınız, verdiğim rnek "inherit" için çok açıklayıcı olmamış. Sanki başka bir zelliğe ait gibi duruyor. yukarıdaki rnek JS de inherit kavramını çok basitçe açıklamış. OOP konusunu birçok kaynaktan araştırmaya devam ediyorum çünkü anladığım kadarıyla OOP ile çok temiz kodlar yazılabiliyor ve bu kodlar zellikle Agile "metodu" ile sürekli ve kolayca güncellenebiliyorlar. Birçok nemli nodejs modülünün kodlarına baktığımda oop'da kullanılan prototype yapısını grüyorum. rneğin: https://github.com/Automattic/kue/blob/master/lib/kue. js adresindeki koda baktığınızda, nce: function Queue { options = options || ; this. name = options. name || 'kue'; this. id = . join ; this. _options = options; this. promoter = null; this. workers = exports. workers; this. shuttingDown = false; Job. disableSearch = options. disableSearch! false; options. jobEvents! undefined? Job. jobEvents = options. jobEvents : ''; redis. configureFactory ; this. client = Worker. client = Job. client = redis. createClient ; } gibi bir değişken tanımlıyor. Daha sonra aşağıdaki gibi bir çok prototype ile yukarıdaki Queue objesinden de kalıtım alarak, sanırım bunları extend ediyor. Mesela: Queue. prototype. setupTimers = function { if this. checkJobPromotion ; this. checkActiveJobTtl ; }; Queue. prototype. process = function { var self = this; if fn = n, n = 1; while { var worker = new Worker . start ; worker. id = . join ; worker. on('error', function ); worker. on('job complete', function { // guard against emit after shutdown if }); // Save worker so we can access it later self. workers. push ; } this. setupTimers ; }; Queue. prototype.completeCount = function { if( 1 arguments. length ) return this. cardByType ; }; ... gibi.. Ne kadar sade bir yazım. Benim yazdığım kodlarda callback-hell den geçilmiyor ve bugüne kadar bir kez olsun prototype kullanmadım.. Daha bir çok eksiklik sayabiliriz. Madem bir iş yapıyorum, onu da sağlam yapayım istiyorum. Bu yüzden OOP yi yukarıdaki şekilde kullanarak düzgün ve kolay geliştirilebilir kodlar yazmak amacındayım. Yorumların için tekrar teşekkürler.

RockZs bunu yazdı NmC verdiğin bilgiler için teşekkür ederim. Sanırım şunu demek istedin : function Memeli var insan = new Memeli ; var maymun = new Memeli ; var yunus = new Memeli ; Memeli. prototype. yuru = function Memeli. prototype. zipla = function insan. yuru ; maymun. yuru ; yunus. zipla ; prototype kullanımı ile ilgili güzel bir rnek oldu. sanırım "inherit" yani devralmak/miras almak dan bahsedilen, metodun objeye değil de doğrudan class a eklenmesi ve objenin de bir komut ile o metodu uygulaması . Yukarıdaki kalıtımın rneği değil sylediğiniz gibi. Normalde kalıtım bizi kod tekrarından kurtarır. ... Selamlar, Aslında yukarıda verdiğim rnek bir kalıtım rneği. OOP'de sadece metodlar değil, properties de kalıtım gsterebilirler. Bu rnekte de 3 tane memeli tanımladım , bunların hepsinin türkçe ve latince isimleri gibi aynı class'dan zellikler taşıyorlar. Bu rnekte, bütün objelere prototype ile yeni zellikler katmam kafa karıştırıcı gelmiş olabilir. Tabi bir de "nested" bir yapı sz konusu. Şimdi yukarıdaki yanıtınızda verdiğiniz rneği hatırlayalım: Burada Yarasa ve Yunus; Memeli sınıfından kalıtım alıyor. Tüm memeliler yürüyebilirken, yunus ve yarasanın sırasıyla yüzmek ve uçmak gibi ek zellikleri var. Her seferinde memelinin yürüme zelliğini hem yunus hem yarasa için yazmaktansa basitçe memeliden miras aldık. Hatta ve hatta yunus ve yarasayı, memeliden türemiş bir nesne isteyen her yere yollayabilme kabiliyetine kavuştuk. Bunu JavaScript dilinde Prototypal OOP kullanarak kalıtım sağlayacak şekilde dediğiniz gibi şyle kodlayabiliriz: / Yapılanlar: Yarasa ve Yunus; Memeli sınıfından kalıtım alıyor. Tüm memeliler yürüyebilirken, yunus ve yarasanın sırasıyla yüzmek ve uçmak gibi ek zellikleri var. Her seferinde memelinin yürüme zelliğini hem yunus hem yarasa için yazmaktansa basitçe memeliden miras aldık. Hatta ve hatta yunus ve yarasayı, memeliden türemiş bir nesne isteyen her yere yollayabilme kabiliyetine kavuştuk. / var islemTakibi = 1; //object constructor function function Memeli { this. yorgunluk = yorgunluk; this. isim = isim; this. yuru = function ; }; //Adding methods to our object using prototype Memeli. prototype. yuz = function ; //Adding methods to our object using prototype Memeli. prototype. uc = function //aşağıda yeni objeler somutlaştırıyoruz. //bunların hepsi constructor fonk. sayesinde başta zaten Memeli objesinden kalıtım alıyorlar. //yani burada da aslında bir inheritance sz konusu. var maymun = new Memeli(15, "Charlie"); //maymun objesi tanımlandı. başlangıçta azıcık yorgun olsun (15). adı da "maymun" olarak girildi.. var yunus = new Memeli(0, "Flipper"); //yunus obj. tanımlandı. başlangıçta hiç yorgun değil (0). adı "yunus". var yarasa = new Memeli(25, "Batman"); //yarasa obj. tanımlandı. bu da başlangıçta azıcık yorgun olsun (25). adı "yarasa". //şimdi, en üstte tanımladığımız yapıcı fonk. gereği zaten tüm hayvanlar yürüyebiliyorlar //şimdi nce maymun ve yarasayı yürütelim maymun. yuru ; yarasa. yuru ; //şimdi yunus için yüzme, yarasa için uçma zelliklerini ilgili aynı şekilde ilgili objelere verelim. yunus. yuz ; yarasa. uc ; Yukarıdaki kod çalıştırıldığında çıktı şu şekilde oluyor: 1. işlem: Charlie adlı hayvanın yorgunluğu 15 puandı. Charlie yürüdüğü için yorgunluğu 10 puan arttı. Şimdi yorgunluğu 25 oldu. 2. işlem: Batman adlı hayvanın yorgunluğu 25 puandı. Batman yürüdüğü için yorgunluğu 10 puan arttı. Şimdi yorgunluğu 35 oldu. 3. işlem: Flipper adlı hayvanın yorgunluğu 0 puandı. Flipper yüzdüğü için yorgunluğu 30 puan arttı. Şimdi yorgunluğu 30 oldu. 4. işlem: Batman adlı hayvanın yorgunluğu 35 puandı. Batman uçtuğu için yorgunluğu 50 puan arttı. Şimdi yorgunluğu 85 oldu. RockZs tarafından 13/Eki/16 21:33 tarihinde düzenlenmiştir

Selamlar, Bir kaynaktan JavaScript'de kullanmalık OOP çalışırken "Adding methods to our object using prototype" konusuna geldim. Konuyu anladım, burada bir sıkıntı yok fakat OOP de sıkça kullanılan "inherit" terimine biraz kafam takıldı. Şimdi kaynakta diyor ki: "We use it when we would like an object to inherit a method after it has been defined. " "inherit" kelimesi, Türkçe dilinde "miras olarak devralmak, kalıt kalmak, varis olmak" gibi anlamlara sahip. Yine tureng'de bilgisayar terimi olarak anlamı da "devralmak" olarak tercüme edilmiş. Biz prototype'ları niçin kullanıyoruz? Cevap yine kaynakta verilmiş: "Think of prototyping mentally as 'attaching' a method to an object after it's been defined..". Yani zetle diyor ki: "her metodu constructor fonksiyonunda tanımlamak zorunda değiliz, prototype ile bir objeye daha sonra da yeni bir metod ekleyebiliriz". Şimdi tüm bunların içinde "devralmak, kalıt kalmak, miraz olarak devralmak" gibi anlamlara gelen "inherit" nasıl oluyor da yukarıda bahsettiğim bir objeye yeni bir metod ekleme anlamında kullanılabiliyor.. Okuduğunuz için teşekkürler. faydalandığım kaynak : http://www.javascriptkit.com/javatutors/oopjs2. shtml RockZs tarafından 13/Eki/16 12:45 tarihinde düzenlenmiştir

NmC verdiğin bilgiler için teşekkür ederim. Sanırım şunu demek istedin : //the constructor function function Memeli //instantiating new objects var insan = new Memeli ; var maymun = new Memeli ; var yunus = new Memeli ; //a new method for the constructor function Memeli. prototype. yuru = function //an another new method for the constructor function Memeli. prototype. zipla = function //applying new methods to objects insan. yuru ; maymun. yuru ; yunus. zipla ; prototype kullanımı ile ilgili güzel bir rnek oldu. sanırım "inherit" yani devralmak/miras almak dan bahsedilen, metodun objeye değil de doğrudan class a eklenmesi ve objenin de bir komut ile o metodu uygulaması . RockZs tarafından 13/Eki/16 14:00 tarihinde düzenlenmiştir

Hocam soyle dusun, Memeli diye bir ust sinif olusturdun bunun altindan Maymun, insan gibi siniflar tureteceksin Memeli sinifi biraz hayali sinif gibi birsey ve sadece standartlari olusturuyosun burda ve bu standartlari olustururken diyorsun ki her memelinin yurumesi gerek ve bunun icin bir yuru diye bir metodu olmasi lazim ama Memeli dedigin sey hayali oldugu icin burda kodlamiyorsun bu metodu. Alttan turetilen siniflara kodlama zorunlulugu getiriyorsun. Peki bu memeli sinifi ne icin var? Ileride yazdigin bir kod ile butun memelileri hareket ettiren bir kod yazman gerektiginde. Memeli a = new Insan ; Memeli a = new Maymun ; for(int i = 0; i < a. size; a++) gibi atraksyonlar yapabiliyorsun. There are 10 types of people in the world. Those who knows binary and those who dont...

NmC verdiğin bilgiler için teşekkür ederim. Sanırım şunu demek istedin : function Memeli var insan = new Memeli ; var maymun = new Memeli ; var yunus = new Memeli ; Memeli. prototype. yuru = function Memeli. prototype. zipla = function insan. yuru ; maymun. yuru ; yunus. zipla ; prototype kullanımı ile ilgili güzel bir rnek oldu. sanırım "inherit" yani devralmak/miras almak dan bahsedilen, metodun objeye değil de doğrudan class a eklenmesi ve objenin de bir komut ile o metodu uygulaması . Yukarıdaki kalıtımın rneği değil sylediğiniz gibi. Normalde kalıtım bizi kod tekrarından kurtarır. C# için: public class Memeli { private string _ad; private string _latincead; public Memeli public void Yuru } public class Yarasa : Memeli { public void Uç } public class Yunus: Memeli { public void Yüz } Burada Yarasa ve Yunus; Memeli sınıfından kalıtım alıyor. Tüm memeliler yürüyebilirken, yunus ve yarasanın sırasıyla yüzmek ve uçmak gibi ek zellikleri var. Her seferinde memelinin yürüme zelliğini hem yunus hem yarasa için yazmaktansa basitçe memeliden miras aldık. Hatta ve hatta yunus ve yarasayı, memeliden türemiş bir nesne isteyen her yere yollayabilme kabiliyetine kavuştuk. Yine C# için konuşursak List<Memeli> Memeliler = new List<Memeli> ; Memeliler. Add ; Memeliler. Add ; gibi tek yerde de saklayabiliriz. Tipinden emin olduğumuz nesneleri alt sınıfa kast edip kullanabiliriz. Oradaki rnek pek güzel olmamış (prototip tabanlı nyp biraz farklı bir konsept olmasına rağmen sınıf tabanlı nyp benzeri zellikleri de kullanabiliriz: https://www.sitepoint.com/simple-inheritance-javascript/ http://javascriptissexy.com/oop-in-javascript-what-you-need-to-know/ Yukarıdaki bağlantılardan takip etmenizi tavsiye ederim. Olaylara karışmayın!

Uzun uzadıya alıntı yapmadan doğrudan sylemek istediğim kısma geçiyorum. Verdiğiniz JS kodunda sıkıntı var, kalıtım gibi davranıyor ama saf kalıtım değil. Sadece tek bir prototipiniz var ve tüm nesneleri bundan kopyalıyorsunuz. Kısaca eldeki maymun da insan da aynı sorulara aynı şekilde cevap veriyor . İstediğimiz gerçekten bu mu? Yoksa overkill mi oluyor? rneğinizde bir arabasamağı atlamış olabilir misiniz Aşağıda bağlantısını verdiğim tartışmalara gz gezdirin. http://javascript.info/tutorial/inheritance https://stackoverflow.com/questions/2064731/good-example-of-javascripts-prototype-based-inheritance Olaylara karışmayın!