Nesne Tabanlı Programlama Yaklaşımı

BeyazEsya

Picopat
Katılım
1 Mayıs 2021
Mesajlar
184
Daha fazla  
Cinsiyet
Erkek
Meslek
Öğrenci
Merhaba, nesne tabanli programlama bizim dünyamıza ait şeylerin soyutlama ile (abstraction) dijital ortama aktarmamiza yarıyorsa:
Örneğin Java'da Scanner sınıfı var. Bu sınıf dış dünyadan alınan ve soyutlastirilan bir birim degil. O zaman bu tanım eksik mi oluyor?
 
Son düzenleyen: Moderatör:
Soyutlamayı aslında genelleme yapmak için kullanılan bir yöntem gibi de düşünebiliriz. Bunların illa ki dış dünya ile ilişkisi olması gerekmez. İlla verdiğiniz örnekten gideceksek herhangi bir sınıftan türetilmemiş bir Scanner sınıfı ile soyutlamadır çünkü gerçek dünyadaki scanner'ın tüm özelliklerini taşımaz. Sadece işine yarayacak kısımları taşır ve modeller.

Nesneye yönelik programlamada da soyutlama gerçek dünyadaki nesneyi karşılama amacıyla yapılması gerekemez. Örneğin VeritabanıBağlantısıConcrete sınıfı VeritabaniBaglantisiAbstact sınıfından türetilebilir. Buradaki abstact class da concrete class da gerçek dünyada var olan kavramlar değiller. Concrete class abtract classtan daha fazla detay taşıyor aradaki temel fark bu.

Soyutlama ve çok biçimlilik birbiriyle incelenmesi gereken kavramlar. Eğer çok biçimlilik kullanmıyorsanız soyutlama önemli bir katkı sağlamaz nesneye yönelik programlamada. Bu iki özellik beraber kullanıldığında birbirinin yerine kullanılabilecek sınıflar üretmemizi sağlıyor. Örneğin soyut bir Scanner sınıfınız vardır. Bundan türetilmiş HPScanner, EpsonScanner sınıflarınız vardır. Scanner sınıfı ortak yapılacak işlerin ne olduğunu tanımlarken HPScanner ve EpsonScanner sınıfları bu işleri markaya göre özel olarak yapan kodları taşır. Siz tarayıcı gerektirecek bir işlem yapacakken doğrudan Scanner sınıfını kullanırsınız. Böylece HP için Epson için ayrı ayrı kodu Scanner sınıfını kullanacak sınıfta yazmanız gerekmez.
 
Soyutlamayı aslında genelleme yapmak için kullanılan bir yöntem gibi de düşünebiliriz. Bunların illa ki dış dünya ile ilişkisi olması gerekmez. İlla verdiğiniz örnekten gideceksek herhangi bir sınıftan türetilmemiş bir Scanner sınıfı ile soyutlamadır çünkü gerçek dünyadaki scanner'ın tüm özelliklerini taşımaz. Sadece işine yarayacak kısımları taşır ve modeller.

Nesneye yönelik programlamada da soyutlama gerçek dünyadaki nesneyi karşılama amacıyla yapılması gerekemez. Örneğin VeritabanıBağlantısıConcrete sınıfı VeritabaniBaglantisiAbstact sınıfından türetilebilir. Buradaki abstact class da concrete class da gerçek dünyada var olan kavramlar değiller. Concrete class abtract classtan daha fazla detay taşıyor aradaki temel fark bu.

Soyutlama ve çok biçimlilik birbiriyle incelenmesi gereken kavramlar. Eğer çok biçimlilik kullanmıyorsanız soyutlama önemli bir katkı sağlamaz nesneye yönelik programlamada. Bu iki özellik beraber kullanıldığında birbirinin yerine kullanılabilecek sınıflar üretmemizi sağlıyor. Örneğin soyut bir Scanner sınıfınız vardır. Bundan türetilmiş HPScanner, EpsonScanner sınıflarınız vardır. Scanner sınıfı ortak yapılacak işlerin ne olduğunu tanımlarken HPScanner ve EpsonScanner sınıfları bu işleri markaya göre özel olarak yapan kodları taşır. Siz tarayıcı gerektirecek bir işlem yapacakken doğrudan Scanner sınıfını kullanırsınız. Böylece HP için Epson için ayrı ayrı kodu Scanner sınıfını kullanacak sınıfta yazmanız gerekmez.
Yani şöyle diyebilir miyiz:
Herhangi bir şeyin soyutlanarak bilgisayar ortamına aktarilip nesnelestirme yaklaşımına nesne yönelimli programlama denir.

Örneğin bir cümleyi kafamızda tariyoruz. Buradaki tarama işlemi soyut bir iştir. Bunu dijital dünyaya yine soyut bir şekilde aktarıyoruz ama attribute ve behaviour vererek onu nesnelestiriyoruz. Buna nesne yönelimli programlama diyoruz.

Ornekler hep gercek nesneler üzerinden. Bu yüzden kafam karıştı. Hep araba, kalem vb. örnekler ile gidiyorlar.

Aklima bu şekilde geldi.🙂
 
Yani şöyle diyebilir miyiz:
Herhangi bir şeyin soyutlanarak bilgisayar ortamına aktarilip nesnelestirme yaklaşımına nesne yönelimli programlama denir.

Örneğin bir cümleyi kafamızda tariyoruz. Buradaki tarama işlemi soyut bir iştir. Bunu dijital dünyaya yine soyut bir şekilde aktarıyoruz ama attribute ve behaviour vererek onu nesnelestiriyoruz. Buna nesne yönelimli programlama diyoruz.

Ornekler hep gercek nesneler üzerinden. Bu yüzden kafam karıştı. Hep araba, kalem vb. örnekler ile gidiyorlar.

Aklima bu şekilde geldi.🙂
Yanlış düşünüyorsun.

Soyutlama, senin fikirlerinin aktarımı değil. Bilgisayarın dilinin sana anlayabileceğin bir şekilde aktarılması. Teknik terim yerine o terime atanmış bir değişken adı olarak kelime oyunu kullanılması.

Çocuklara zor kelimler nasıl cici bibi gibi anlatılıyorsa.

Kendin kafanda uydurduğun her şey, senin uydurman olarak kalır. Bilgisayarında bir işlev görmez.


Önce temel programlama öğren. Nesne yönelimli programlama ile programlamaya giriş yapılmaz. Böyle saçma sorular ile aklını meşgul edersin.
(C, Pascal, Basic)
 
Yanlış düşünüyorsun.

Soyutlama, senin fikirlerinin aktarımı değil. Bilgisayarın dilinin sana anlayabileceğin bir şekilde aktarılması. Teknik terim yerine o terime atanmış bir değişken adı olarak kelime oyunu kullanılması.

Çocuklara zor kelimler nasıl cici bibi gibi anlatılıyorsa.

Kendin kafanda uydurduğun her şey, senin uydurman olarak kalır. Bilgisayarında bir işlev görmez.
Biraz daha araştırma yapacağım, birkaç takıldığım nokta var.
 
En klasik örneklerden biri kedi, köpek, hayvan sınıfları olarak öğretiliyor genelde derslerde. kedi, köpek diyince aklımıza daha somut bir hayvan geliyor, hayvan dediğimizde ise bir sürü canlıyı içeren bir kategori daha soyut bir kavram aklımıza geliyor. Genelde bunun üzerinden öğretiyorlar kalıtımı. Hayvan soyut sınıf, Kedi ve Köpek ise somut sınıflar oluyor bu anlatıma göre.

Problem şu ki aslında gerçek dünyada bir kavramın somutluğu soyutluğu program yazarken bir önem taşımıyor. Eğer uygulamanızdaki kedi, köpek gibi kavramlar birbirinden farklı işler yapmayacaksa bunları soyut bir hayvan sınıfdan türetilmiş ayrı sınıflar olarak yazmanıza gerek yok. Örneğin veterinerlere uygulama yazıyorsunuz. Kedi için ayrı köpek için ayrı özel istekler yoksa uygulama tarafında sadece kayıtları tutulacaksa bunlar için ayrı somut sınıflar yazmazsınız.

Bir başka örnekte eğer kediler arasında geçen bir MMO oyunu yazıyorsak Kedi burada soyut sınıf olabilir farklı özellikleri farklı skilleri vs. olan spesifik kedi türleri somut sınıf olabilir. Yani programın yapısına göre neyin somut neyin soyut sınıf olacağı değişir. Temel olarak ortak kullanılan kodlar soyut sınıflarda özel kodlar somut sınıflarda yazılır denebilir.

Bunun dışında hiç soyut sınıf kullanmadan da nesneye yönelik programlama yapmak mümkün. Bunun için C#'da java da interface denilen tipler var. Bunların içine hiç kod yazmıyorsunuz sadece bir sınıf neler yapmalı onları yazıyorsunuz. Bunlardan türetilmiş sınıflar da o işlemleri gerçekleştiren kodları içeriyor. Bu aslında çok daha sade bir yapı. Sonradan genişletilecek bir kütüphane vs. yazılmıyorsa bence bu tercih edilmeli.
 
En klasik örneklerden biri kedi, köpek, hayvan sınıfları olarak öğretiliyor genelde derslerde. kedi, köpek diyince aklımıza daha somut bir hayvan geliyor, hayvan dediğimizde ise bir sürü canlıyı içeren bir kategori daha soyut bir kavram aklımıza geliyor. Genelde bunun üzerinden öğretiyorlar kalıtımı. Hayvan soyut sınıf, Kedi ve Köpek ise somut sınıflar oluyor bu anlatıma göre.

Problem şu ki aslında gerçek dünyada bir kavramın somutluğu soyutluğu program yazarken bir önem taşımıyor. Eğer uygulamanızdaki kedi, köpek gibi kavramlar birbirinden farklı işler yapmayacaksa bunları soyut bir hayvan sınıfdan türetilmiş ayrı sınıflar olarak yazmanıza gerek yok. Örneğin veterinerlere uygulama yazıyorsunuz. Kedi için ayrı köpek için ayrı özel istekler yoksa uygulama tarafında sadece kayıtları tutulacaksa bunlar için ayrı somut sınıflar yazmazsınız.

Bir başka örnekte eğer kediler arasında geçen bir MMO oyunu yazıyorsak Kedi burada soyut sınıf olabilir farklı özellikleri farklı skilleri vs. olan spesifik kedi türleri somut sınıf olabilir. Yani programın yapısına göre neyin somut neyin soyut sınıf olacağı değişir. Temel olarak ortak kullanılan kodlar soyut sınıflarda özel kodlar somut sınıflarda yazılır denebilir.

Bunun dışında hiç soyut sınıf kullanmadan da nesneye yönelik programlama yapmak mümkün. Bunun için C#'da java da interface denilen tipler var. Bunların içine hiç kod yazmıyorsunuz sadece bir sınıf neler yapmalı onları yazıyorsunuz. Bunlardan türetilmiş sınıflar da o işlemleri gerçekleştiren kodları içeriyor. Bu aslında çok daha sade bir yapı. Sonradan genişletilecek bir kütüphane vs. yazılmıyorsa bence bu tercih edilmeli.
Benim kafam halen daha karışık. Mesela oyun üzerinden gidelim. Bir vehicle sınıfı var ve bu sınıfta araçlara özgü davranışlar ve özellikler var. Bizler de bu sınıftan yeni alt sınıflar üretebiliyoruz ve nesneler oluşturabiliyoruz. Fakat mesela her dilde matematik sınıfı da vardır. Bu matematik sınıfının mesela nesne ile arasındaki ilişki ndir? Yani ben bunu bağdaştıramıyorum. Bu yüzden tam oturmuyor.
 
Benim kafam halen daha karışık. Mesela oyun üzerinden gidelim. Bir vehicle sınıfı var ve bu sınıfta araçlara özgü davranışlar ve özellikler var. Bizler de bu sınıftan yeni alt sınıflar üretebiliyoruz ve nesneler oluşturabiliyoruz. Fakat mesela her dilde matematik sınıfı da vardır. Bu matematik sınıfının mesela nesne ile arasındaki ilişki ndir? Yani ben bunu bağdaştıramıyorum. Bu yüzden tam oturmuyor.
Bir yere gideceğin zaman önce mesafeyi ve o mesafeyi kaç adımda yürüyeceğini ve bunun ne kadar süreceğini hesaplamalısın ki, ayakkabılarının ne zaman giyilemeyecek kadar yıpranacağını öğrenip, ne zaman yenisini alacağını bilmelisin. Ona göre de bütçenden ne zaman ayakkabı parası ayırman gerektiğine karar verebilmelisin.
 
Bir yere gideceğin zaman önce mesafeyi ve o mesafeyi kaç adımda yürüyeceğini ve bunun ne kadar süreceğini hesaplamalısın ki, ayakkabılarının ne zaman giyilemeyecek kadar yıpranacağını öğrenip, ne zaman yenisini alacağını bilmelisin. Ona göre de bütçenden ne zaman ayakkabı parası ayırman gerektiğine karar verebilmelisin.
Yok o anlamda değil. Demek istediğim şu: orneklerde hep araba vb. ornekler veriliyor ve bir taslaktan yeni araç nesneleri oluşturuluyor. Ama matematik sınıfından nasil bir nesne olusturcaksin? O yüzden nesne tabanli programlamayi anlayamadım. Ben hep araba ornegindeki gibi düşünüyorum. Bir plan vardi ve nesne urettin. Ya diğer yapılarda? Diger sınıflarda? Mesela dosya okuma ilgili sınıflar, ayni sey burada da geçerli. Yine arasındaki ilişkiyi anlamadim, bu sınıflarda nesnein ne isi var?
 
Yok o anlamda değil. Demek istediğim şu: orneklerde hep araba vb. ornekler veriliyor ve bir taslaktan yeni araç nesneleri oluşturuluyor. Ama matematik sınıfından nasil bir nesne olusturcaksin? O yüzden nesne tabanli programlamayi anlayamadım. Ben hep araba ornegindeki gibi düşünüyorum. Bir plan vardi ve nesne urettin. Ya diğer yapılarda? Diger sınıflarda? Mesela dosya okuma ilgili sınıflar, ayni sey burada da geçerli. Yine arasındaki ilişkiyi anlamadim, bu sınıflarda nesnein ne isi var?
Yazmıştım, Nesne yönelimli programlamadan programlamaya başlanılmaz diye.
Başkasının yaptıklarını kullanıyorsun. Nasıl işlediğini hiç bir zaman anlayamazsın.

İngilizce biliyorsan buraya bir bak :Yabasic
 

Geri
Yukarı