Bilmek istediğin her şeye ulaş

Nesne tabanlı programlama nasıl öğrenilir?

Yaklaşık 2 yıldır C# ile uygulama geliştiriyorum. Teorik olarak nesne tabanlı programlamanın ne demek olduğunu da biliyorum ancak bunu pratikte pek benimseyebilmiş değilim. Nesne tabanlı düşünme yaklaşımı nasıl oluşur ya da gelişir? Ne yapmamı tavsiye edersiniz? Youtube'dan video izlemekten çok sıkıldım. İstanbul'da bir eğitim tavsiye edebilirseniz sevinirim. Düzenle
Java'yi secerek ogrenilecek dil olarak, cunku java da neredeyse fonksiyonel programlama hic yok. Hersey nesne tabanli ta ilk ciktigindan beri.
  • Paylaş
2

Bazarov, Öğrenmeye dair hiçbir tavsiye bulamadım ben. Java secince bir anda kendi kendine mi öğreniyor insan?

Omer Ayverdi, tavsiyem ingilizce biliyorsan bluej isminde bir ide si javanin sirf ogrenmek icin okullar icin yapilmis bir ide oyle eclipse gibi cok karmasik her tarafi butonlarla dolu bir ide degil ve birde kitap tabi ozellikle bluej icin tasarlanmis bir kitap mesela "Objects First with Java A Practical Introduction using BlueJ". sinif ve nesne nin ne oldugunu kafana kaziyacaktir bu emin ol.

csystem.org/programlama-kurslar%C4%B1
btakademi.com/egitim/egitimler/? İd=18& e...

İkiside iyi kurslardır ama bana kalırsa kitaptan öğren derim. Ben internette bir ordan bir burdan parça parça öğrendim(hala da öğreniyorum). Türkçe kaynak olarak dr.com.tr/kitap/java-tasarim-sablanlari-... bunu tavsiye ederim. Yabancı kaynak olarakta, ben daha okumadım ama amazon.com/head-first-design-patterns-fr... bu kitap için çok iyi diyorlar.
  • Paylaş
3

Bazarov, Btakademi'nin bahsettiğin eğitimi bu haftaiçi olacaktı ama iptal oldu yoksa katılacaktım. Yalnız içimde bir şüphe de vardı oop'yi oturtmadan design pattern ağır mı olur diye.

Kitaplara da mutlaka bakacağım teşekkür ederim paylaşım için. Tek başına kitaptan öğrenmek çok kolay olmuyor ama yine de deneyeceğim kendimi sıkışmış gibi hissetmeye başladım artık.

Uğur Çakmak, Rica ederim. Sıkışmışlık sendromunu biliyorum, hatta o zamanlarda öğrenmiştim yani öğrenmeye mecbur kalmıştım. OOP çok karmışık değil interface, abstract, overload, override, interitance, ploymorphism(şuan aklıma gelen bunlar belki unuttuğum bir iki tane daha vardır fazla değildir) kavramlarını araştır bir günde bile öğrenirsin. Design patterns ise zaman alır, tecrübe ister çünkü.

Bazarov, Açıklamada da belirttim teorik olarak hepsini biliyorum ama bir projeye başlarken şöyle classlar yazayım, bunları bu interface den türetirim, şurada polymorphism şöyle kullanılırım diye tasarım yapamıyorum bir türlü. Objeler halinde düşünmek falan yok bende :) oraya bir şekilde geçiş yapabilmek istiyorum.

İlk önce oop öğrenmek için oop bir dille uğraşmak gerekir. Bazı kavramları bilmenizde gerekir. Abstraction, Interitance, Polymorphism vb.Kimi teknolojilerde OOP programları hızlıca anlamanıza , okumanıza ve rafactoring yapmanıza fayda sağlar(UML vb.).Bunları da bilmekte yarar vardır.
Sonuç olarak OOP de asıl amaç profesyonel bir kod düzeni ile güvenliği sağlam uygulamalar geliştirmektir. Bu doğrultuda MVC mimarisini kullanmak avantaj sağlar. Ama bütün bunları en hızlı ve en etkili şekilde öğrenmenin yolu profesyonel bir işte projenin bir parçası olup canlı bir sistemde nasıl yaşadığını görmektir. İş oop mantığının ve kavramlarının oturmasında çok önemlidir.
  • Paylaş
Bir programlama dilini nesne tabanlı yapan üç öğe vardır ve bunları kullanmalısın.

Kapsülleme (dil class benzeri bir yapı sunmalıdır. Yani değişken ve metodları üretilebilir bir obje içinde gruplamalısın.)

Miras (Interitance) : Dil bir sınıftan (veya nesnenin herhangi bir prototipinin) o sınıfın aynı özelliklerini taşıyan ama ek özellikleri de olan başka bir sınıfı, ilk sınıfın özelliklerini tekrar yazmadan çıkarabilmelidir.

, Çokbiçimlilik (Ploymorphism) : Bir ata nesne çocuk nesneyi kendi özellikleri ile temsil edebilmelidir.

Şu anki dillerin büyük çoğunluğu bunlara izin veriyor. Sürekli bu üç özelliği içeren programlar yazmalısın. C#'ta interface, abstract class, delegate, override, sealed gibi keywordları ne kadar iyi anlayıp kullanırsan o kadar iyi. Bunlar nesne tabanlı programlama için icat edilmiş şeyler. Ayrıca, bağımlılık (dependency ya da code coupling) kavramını araştır ve üzerinde çalış. Bağımlılığı düşüren ko yazmaya çalış bu seni nesne temelli yazmaya zorlayacak.
  • Paylaş
4

Bazarov, Bahsettiğiniz kavramları c# öğrenirken öğrenmiştim ancak kod yazma sürecime bir türlü dahil edemedim. Tıkandığım nokta da tam olarak orası. Sıkışınca işin kolay görünen yanlışına kaçmaya başlıyorum.

Ceyhun Çakar, Genellikle tek başına çalıp oynuyorsan nesne tabanlı programlamaya ihtiyaç duymazsın. Kendini buna zorlamak istiyorsan, başkalarının kodlarına eklentiler yap. github'da beğendiğin ama eksik bulduğun projeleri genişletebilirsin. İşe çok fazla kişi karışıyorsa bu tür paradigmalar önem kazanır.

Ceyhun Çakar, NTP (nesne tabanlı programlama) yazılan kodu lego benzeri bir biçime dönüştürür (Daha doğrusu o şekilde yazmaktır). Yani en büyük katkısı değiştirilebilirliğidir. Başkalarının kodlarıyla uğraşırsanız, kullanmak zorunda kalacaksınız (Hatta kullanmamış olanlara kızacaksınız).

Bazarov, Haklısınız. Benim ilerleyememe sebebim de kendi kendime takılıyor olmam. Başkasının kodlarına bakıyorum aslında, üstelik onlar biraz daha benim hedeflediğim şekilde yazılmış ama ben arkamda çok güzel işler bırakmıyorum.