Çözüldü Java abstract sınıfı konusu nasıl anlaşılır?

Bu konu çözüldü olarak işaretlenmiştir. Çözülmediğini düşünüyorsanız konuyu rapor edebilirsiniz.
Çözüm
Site bilgilerinden ziyade kullanıcı ağzından yazılmış yazıların daha az kafa karıştırıcı olduğunu düşünüyorum.

"Genellikle soyut sınıfları oluşturmadaki amacımız fonksiyonların kalıtım yoluyla transferini sağlamaktır. e peki neden abstract diyoruz ki normal kalıtım yoluyla da fonksiyonların transfer edebiliyorduk diyebiliriz. ama soyut sınıfın bir konsepti var. bir sınıf abstract edilmiş ise o sınıftan bir nesne üretemiyor ayrıca bu soyut sınıf ile kalıtım ilişkisi bulunan bir sınıfımız varsa soyut sınıftaki ilgili fonksiyonları kendine göre düzenlemek zorundadır. e ben normal sınıf oluşturur kalıtım yoluyla ilişkilendirdiğim sınıflarında her birinde gider yeniden kendime göre düzenlerim üst sınıfa da abstract demem diyebiliriz. buradaki olay da şu, çocuk sınıf ilgi fonksiyonu oldu ki yeniden düzenlemeyi unuttu. haliyle çağırdığımızda üstteki sınıfın fonksiyonu çalışacak. ama burada da fonksiyonun içi belki boş bırakıldı belki dolu. hani kendimize güvenip sürekli eziyoruz ya çocuk sınıflarda, ne yazdığı önemli değil diye yazdık bir şeyler diyelim. burada isteğimizin dışında bilgisayarın belleğinde boşu boşuna hiç çalışmaması gereken bir fonksiyon için yer tutmuş ve bunu yürütmüş olduk. bir yerde böyle hataların önüne geçmiş olmak dışında nesne üretmeyeceğimiz ayrıca fonksiyon tanımının aktarımına ihtiyaç duyacağımız ve bu fonksiyonun nedenli bir şey olduğunu kullanacağımız sınıflarda özellikle tanımlamamız yani fonksiyonun ebeveyn olan classta içinin dolu olmasının bir amacının olmadığı zaten çocuk sınıflarda kendine özgü olarak çalışma prensibi olan bir yapıya ihtiyaç duyulduğundan abstract sınıflara ihtiyaç duyuyoruz. detaylarına girmeden basitinden böyle bir ihtiyaç tanımı yapılabilir."




"Türkçesi soyut sınıf olan oop’de çokça kullanılan sınıf çeşidi.

-abstract class’ı, birden fazla ortak özelliği bulunan nesnelerin ortak özelliklerini tekrar tekrar tanımlamak yerine, ortak özelliklerin tanımlandığı yer olarak tanımlayabiliriz. örneğin fabrikamız var ve bu fabrikada çalışan işçilerin bilgilerinin tutulduğu bir program tasarlayacağız. fabrikada çalışanları işçi, yönetici, mühendis, tekniker diye 4 kategoriyi ayırdığımızı varsayalım. bu 4 çeşit çalışanın da ortak özellikleri vardır. aldıkları maaşlar, yaşları, cinsiyetleri gibi. bu ortak özellikleri her sınıf için tekrar tekrar tanımlamak yerine bir kez abstract class’da tanımlarız ve bu class’ı diğer sınıflara miras veririz işimiz kolaylaşmış olur.

-abstract classlar içlerinde normal fonksiyonlar tanımlayabildiğimiz gibi abstract fonksiyonlar da tanımlayabiliriz.
abstract fonksiyon tanımlayabilmek için fonksiyonun başına abstract anahtar kelimesini koymalıyız. abstract fonksiyonun mantığı şudur: benzer özelliklere sahip nesnelerde, her bir nesne veya bir grup nesne için farklı olan özellikleri tekrar tekrar tanımlama zorluğunu ortadan kaldırmak. çok bilinen bir örnek üzerinden anlatayım. neredeyse bütün hayvanlar ses çıkarırlar. peki hayvanların çıkardıkları sesler birbirinin aynısı mıdır hayır. o zaman hayvanların sesi için abstract fonksiyon tanımlayıp, her bir hayvandan çıkan farklı ses için bu fonksiyonu override edebiliriz.

-kendilerinden obje oluşturulamaz. yalnızca sınıflara miras verebilir.

-genellikle bu konulara yeni başlayanlar interface ile abstract class’ları karıştırabiliyor. aralarındaki benzerlikleri ve farklılıkları anlatmak gerekirse:

benzerlikler

a. her ikisinden de obje oluşturulamaz.

b. her ikisinde de fonksiyonların gövdeleri boş olmalıdır ve bu fonksiyonların kullanılabilmeleri için override edilmeleri gerekir. (abstract class’lardaki normal tanımlanan fonksiyonlar hariç.)

farklılıklar

a. interface’lerde değişken tanımlanamazken abstract class’larda değişken tanımlanabilir.

b. bir sınıf birden fazla interface den miras alabilirken, en fazla bir abstract class dan miras alabilir."

LOTR Manyağı

Decipat
Katılım
6 Ağustos 2021
Mesajlar
1.514
Çözümler
36
Yer
Bilgi İşlem Sorumlusu
Site bilgilerinden ziyade kullanıcı ağzından yazılmış yazıların daha az kafa karıştırıcı olduğunu düşünüyorum.

"Genellikle soyut sınıfları oluşturmadaki amacımız fonksiyonların kalıtım yoluyla transferini sağlamaktır. e peki neden abstract diyoruz ki normal kalıtım yoluyla da fonksiyonların transfer edebiliyorduk diyebiliriz. ama soyut sınıfın bir konsepti var. bir sınıf abstract edilmiş ise o sınıftan bir nesne üretemiyor ayrıca bu soyut sınıf ile kalıtım ilişkisi bulunan bir sınıfımız varsa soyut sınıftaki ilgili fonksiyonları kendine göre düzenlemek zorundadır. e ben normal sınıf oluşturur kalıtım yoluyla ilişkilendirdiğim sınıflarında her birinde gider yeniden kendime göre düzenlerim üst sınıfa da abstract demem diyebiliriz. buradaki olay da şu, çocuk sınıf ilgi fonksiyonu oldu ki yeniden düzenlemeyi unuttu. haliyle çağırdığımızda üstteki sınıfın fonksiyonu çalışacak. ama burada da fonksiyonun içi belki boş bırakıldı belki dolu. hani kendimize güvenip sürekli eziyoruz ya çocuk sınıflarda, ne yazdığı önemli değil diye yazdık bir şeyler diyelim. burada isteğimizin dışında bilgisayarın belleğinde boşu boşuna hiç çalışmaması gereken bir fonksiyon için yer tutmuş ve bunu yürütmüş olduk. bir yerde böyle hataların önüne geçmiş olmak dışında nesne üretmeyeceğimiz ayrıca fonksiyon tanımının aktarımına ihtiyaç duyacağımız ve bu fonksiyonun nedenli bir şey olduğunu kullanacağımız sınıflarda özellikle tanımlamamız yani fonksiyonun ebeveyn olan classta içinin dolu olmasının bir amacının olmadığı zaten çocuk sınıflarda kendine özgü olarak çalışma prensibi olan bir yapıya ihtiyaç duyulduğundan abstract sınıflara ihtiyaç duyuyoruz. detaylarına girmeden basitinden böyle bir ihtiyaç tanımı yapılabilir."




"Türkçesi soyut sınıf olan oop’de çokça kullanılan sınıf çeşidi.

-abstract class’ı, birden fazla ortak özelliği bulunan nesnelerin ortak özelliklerini tekrar tekrar tanımlamak yerine, ortak özelliklerin tanımlandığı yer olarak tanımlayabiliriz. örneğin fabrikamız var ve bu fabrikada çalışan işçilerin bilgilerinin tutulduğu bir program tasarlayacağız. fabrikada çalışanları işçi, yönetici, mühendis, tekniker diye 4 kategoriyi ayırdığımızı varsayalım. bu 4 çeşit çalışanın da ortak özellikleri vardır. aldıkları maaşlar, yaşları, cinsiyetleri gibi. bu ortak özellikleri her sınıf için tekrar tekrar tanımlamak yerine bir kez abstract class’da tanımlarız ve bu class’ı diğer sınıflara miras veririz işimiz kolaylaşmış olur.

-abstract classlar içlerinde normal fonksiyonlar tanımlayabildiğimiz gibi abstract fonksiyonlar da tanımlayabiliriz.
abstract fonksiyon tanımlayabilmek için fonksiyonun başına abstract anahtar kelimesini koymalıyız. abstract fonksiyonun mantığı şudur: benzer özelliklere sahip nesnelerde, her bir nesne veya bir grup nesne için farklı olan özellikleri tekrar tekrar tanımlama zorluğunu ortadan kaldırmak. çok bilinen bir örnek üzerinden anlatayım. neredeyse bütün hayvanlar ses çıkarırlar. peki hayvanların çıkardıkları sesler birbirinin aynısı mıdır hayır. o zaman hayvanların sesi için abstract fonksiyon tanımlayıp, her bir hayvandan çıkan farklı ses için bu fonksiyonu override edebiliriz.

-kendilerinden obje oluşturulamaz. yalnızca sınıflara miras verebilir.

-genellikle bu konulara yeni başlayanlar interface ile abstract class’ları karıştırabiliyor. aralarındaki benzerlikleri ve farklılıkları anlatmak gerekirse:

benzerlikler

a. her ikisinden de obje oluşturulamaz.

b. her ikisinde de fonksiyonların gövdeleri boş olmalıdır ve bu fonksiyonların kullanılabilmeleri için override edilmeleri gerekir. (abstract class’lardaki normal tanımlanan fonksiyonlar hariç.)

farklılıklar

a. interface’lerde değişken tanımlanamazken abstract class’larda değişken tanımlanabilir.

b. bir sınıf birden fazla interface den miras alabilirken, en fazla bir abstract class dan miras alabilir."
 
Çözüm
KS
KS
Z

zuzulla

Picopat
Katılım
3 Ekim 2021
Mesajlar
13
Site bilgilerinden ziyade kullanıcı ağzından yazılmış yazıların daha az kafa karıştırıcı olduğunu düşünüyorum.

"Genellikle soyut sınıfları oluşturmadaki amacımız fonksiyonların kalıtım yoluyla transferini sağlamaktır. E peki neden abstract diyoruz ki normal kalıtım yoluyla da fonksiyonların transfer edebiliyorduk diyebiliriz. Ama soyut sınıfın bir konsepti var. Bir sınıf abstract edilmiş ise o sınıftan bir nesne üretemiyor ayrıca bu soyut sınıf ile kalıtım ilişkisi bulunan bir sınıfımız varsa soyut sınıftaki ilgili fonksiyonları kendine göre düzenlemek zorundadır. E ben normal sınıf oluşturur kalıtım yoluyla ilişkilendirdiğim sınıflarında her birinde gider yeniden kendime göre düzenlerim üst sınıfa da abstract demem diyebiliriz. Buradaki olay da şu, çocuk sınıf ilgi fonksiyonu oldu ki yeniden düzenlemeyi unuttu. Haliyle çağırdığımızda üstteki sınıfın fonksiyonu çalışacak. Ama burada da fonksiyonun içi belki boş bırakıldı belki dolu. Hani kendimize güvenip sürekli eziyoruz ya çocuk sınıflarda, ne yazdığı önemli değil diye yazdık bir şeyler diyelim. Burada isteğimizin dışında bilgisayarın belleğinde boşu boşuna hiç çalışmaması gereken bir fonksiyon için yer tutmuş ve bunu yürütmüş olduk. Bir yerde böyle hataların önüne geçmiş olmak dışında nesne üretmeyeceğimiz ayrıca fonksiyon tanımının aktarımına ihtiyaç duyacağımız ve bu fonksiyonun nedenli bir şey olduğunu kullanacağımız sınıflarda özellikle tanımlamamız yani fonksiyonun ebeveyn olan classta içinin dolu olmasının bir amacının olmadığı zaten çocuk sınıflarda kendine özgü olarak çalışma prensibi olan bir yapıya ihtiyaç duyulduğundan abstract sınıflara ihtiyaç duyuyoruz. Detaylarına girmeden basitinden böyle bir ihtiyaç tanımı yapılabilir."

"Türkçesi soyut sınıf olan OOP'de çokça kullanılan sınıf çeşidi.

-Abstract Class'ı, birden fazla ortak özelliği bulunan nesnelerin ortak özelliklerini tekrar tekrar tanımlamak yerine, ortak özelliklerin tanımlandığı yer olarak tanımlayabiliriz. Örneğin fabrikamız var ve bu fabrikada çalışan işçilerin bilgilerinin tutulduğu bir program tasarlayacağız. Fabrikada çalışanları işçi, yönetici, mühendis, tekniker diye 4 kategoriyi ayırdığımızı varsayalım. Bu 4 çeşit çalışanın da ortak özellikleri vardır. Aldıkları maaşlar, yaşları, cinsiyetleri gibi. Bu ortak özellikleri her sınıf için tekrar tekrar tanımlamak yerine bir kez abstract Class'da tanımlarız ve bu Class'ı diğer sınıflara miras veririz işimiz kolaylaşmış olur.

-Abstract classlar içlerinde normal fonksiyonlar tanımlayabildiğimiz gibi abstract fonksiyonlar da tanımlayabiliriz.
Abstract fonksiyon tanımlayabilmek için fonksiyonun başına abstract anahtar kelimesini koymalıyız. Abstract fonksiyonun mantığı şudur: Benzer özelliklere sahip nesnelerde, her bir nesne veya bir grup nesne için farklı olan özellikleri tekrar tekrar tanımlama zorluğunu ortadan kaldırmak. Çok bilinen bir örnek üzerinden anlatayım. Neredeyse bütün hayvanlar ses çıkarırlar. Peki hayvanların çıkardıkları sesler birbirinin aynısı mıdır hayır. O zaman hayvanların sesi için abstract fonksiyon tanımlayıp, her bir hayvandan çıkan farklı ses için bu fonksiyonu override edebiliriz.

-Kendilerinden obje oluşturulamaz. Yalnızca sınıflara miras verebilir.

-Genellikle bu konulara yeni başlayanlar interface ile abstract Class'ları karıştırabiliyor. Aralarındaki benzerlikleri ve farklılıkları anlatmak gerekirse:

Benzerlikler.

A. Her ikisinden de obje oluşturulamaz.

B. Her ikisinde de fonksiyonların gövdeleri boş olmalıdır ve bu fonksiyonların kullanılabilmeleri için override edilmeleri gerekir. (abstract Class'lardaki normal tanımlanan fonksiyonlar hariç.)

Farklılıklar.

A. İnterface'lerde değişken tanımlanamazken abstract Class'larda değişken tanımlanabilir.

B. Bir sınıf birden fazla interfaceden miras alabilirken, en fazla bir abstract classdan miras alabilir."

Çok güzel anlatmışsınız hocam teşekkürler.
 

bitwise

Kilopat
Sosyal Tayfı
Katılım
22 Mart 2018
Mesajlar
5.242
Makaleler
1
Çözümler
45
Object Oriented prensiplerinde, gercek hayattaki iliskileri modellemek gerekir.

Bazi seylerin spesifikasyonlari bellidir, bazi seylerin belli degildir.

Ornegin "motorlu tasit" dedigin zaman kafanda bir sey canlanir ama bu kavram abstract'tir.
Her motorlu tasitta bulunan bazi ozellikler vardir ve bunlar nettir. Ornegin motorunun olmasi.
"Araba" bir cesit motorlu tasittir ama hala abstrakttir.
Fiat Egea bilmem ne dersen artik iyice ne oldugu belirgin hale gelir.

Iste bu yuzden motorlu tasit -> araba -> egea ; soldan saga dogru abstrakt bir modelden somut modele dogru gidersin.

Abstract bir class, belirli konseptlerin ne olacagini seklen belirtir ancak implementasyon detaylarini concrete class belirler.

Abstract class'lari "new MotorluTasit()" seklinde instantiate edememenin sebebi de budur. Motorlu tasit diye bir sey tek basina var olamaz, detaylandirilmasi daha dogrusu implemente edilmesi gerekir. Galeriye gidip "bana ordan bir motorlu tasit verin" demek gibi bir sey bu.

Cok gerekmedikce kullanmamak gerekir cunku kisitlayicidir. Abstract bir class dizayni sirasinda yapacagin bir hata onu extend eden tum class'lara etkiyecektir. Interface kullanmak daha dogrudur.

Ornegin gercek hayatta "Canli" -> hayvan -> kedigiller -> Sibirya Kaplani gibi bir hiyerarsi kurulabilir. Yine saga dogru ne oldugu netlesir sola dogru abstractlasir. "Canli" diye bir sinif yaziyorsan bunu abstract yapman en dogrusudur. Ancak buna "oksijenliSolunum()" diye bir metod koyarsan yanlis bir tasarim yapmis olursun cunku her canli oksijenli solunum yapmaz.
 
KS
KS
Z

zuzulla

Picopat
Katılım
3 Ekim 2021
Mesajlar
13
Object oriented prensiplerinde, gercek hayattaki iliskileri modellemek gerekir.

Bazi seylerin spesifikasyonlari bellidir, bazi seylerin belli degildir.

Ornegin "motorlu tasit" dedigin zaman kafanda bir şey canlanir ama bu kavram abstract'tir.
Her motorlu tasitta bulunan bazi ozellikler vardir ve bunlar nettir. Ornegin motorunun olmasi.
"Araba" bir cesit motorlu tasittir ama hala abstrakttir.
Fiat egea bilmem ne dersen artik iyice ne oldugu belirgin hale gelir.

Iste bu yuzden motorlu tasit -> araba -> egea; soldan saga dogru abstrakt bir modelden somut modele dogru gidersin.

Abstract bir class, belirli konseptlerin ne olacagini seklen belirtir ancak implementasyon detaylarini concrete class belirler.

Abstract Class'lari "New MotorluTasit()" seklinde instantiate edememenin sebebi de budur. Motorlu tasit diye bir sey tek basina var olamaz, detaylandirilmasi daha dogrusu implemente edilmesi gerekir. Galeriye gidip "bana ordan bir motorlu tasit verin" demek gibi bir sey bu.

Cok gerekmedikce kullanmamak gerekir cunku kisitlayicidir. Abstract bir class dizayni sirasinda yapacagin bir hata onu extend eden tum Class'lara etkiyecektir. Interface kullanmak daha dogrudur.

Ornegin gercek hayatta "canli" -> hayvan -> kedigiller -> sibirya kaplani gibi bir hiyerarsi kurulabilir. Yine saga dogru ne oldugu netlesir sola dogru abstractlasir. "canli" diye bir sinif yaziyorsan bunu abstract yapman en dogrusudur. Ancak buna "oksijenliSolunum()" diye bir metod koyarsan yanlis bir tasarim yapmis olursun cunku her canli oksijenli solunum yapmaz.

Teşekkürler hocam sizin örneğinizde çok güzelmiş. Zaten kafamda oturmuştu ama çok çabuk unutan biriyim artık unuttukça buraya gelip hatırlarım.
 
Yukarı