Abstract class və method nədir?

Abstract class və method nədir və daha çox nə üçün istifadə olunur, program yazılımında istifadə etmək yararlıdır yoxsa yox, birdə daha bu method və classlardan nə vaxt istifadə olunur?

Verilmiş cavablar və yazılan şərhlər (5 cavab var)

Ferid Mövsümov (2012-02-11 13:22:06)
Abstract'ın adi sinifden ferqi odur ki sinifler abstract bir sinifden extends eliyende biz 100% emin olabilirik ki exttends eden sinif abstract sinifin bütün abstract metodlarının içini dolduracaq. Abstract metodlar override edilmemiş compiler icaze vermeyecek kodu run etmeye.

dragon_700 (2012-02-11 12:56:14)
Əvvəla cavablandırdığınız üçün təşəkkür edirəm. Sizin izahınızdan onu başa düşdüm ki, abstract class və methodlar sadəcə kod hissəsini sadələşdirmək üçün istifadə edirik. Çəkdiyiniz misaldan da göründüü kimi bir db abstract class yaradır daha sonra isə ondan extendle vərəsə alırıq bəs bunu adi classlada edə bilmərikmi nəticədə yenədə ondan vərəsə götürə bilərik. Abstractı fərqli edən nədi?

Ferid Mövsümov (2012-02-11 03:15:29)
Verdiyim linkde interface ve abstract arasındaki ferq'e deyinerek başa salmağa çalışmışam her ikisini de teze öyrenmeye başlayırsansa bunların iksini de böyük ehtimalla sef salabilersen o nezerden de faydalı olabiler senin üçün. Bele bir misal elave edim fikirleş ki bir proyektde birden çox db işledirsen mysql, oracle, sql vs. istifadeçi bunlardan birini seçmelidi bu veziyette sen her bir database üçün ayrı ayrı if else yazmaq yerine Database adında bir abstract metod yazarsan onun içine de her database de işledilen ortaq funksiyalar üçün abstract bir metod yazarsan meselen connect() metodu. Butun db lerin connect metodu ferqli adlarda olabiler meselen biri baglan() metodu birisi con() metodu... sen bütün bu database siniflerini bizim evvelceden yarattığımız Database adlı metoddan extend elesen onda mysql, oracle vs. hamısının özüne aid bir connect metodu olacaq çükü hammısı bunu ferqli şekilde override edecek. [code]public class Mysql extends Database { @override public void connection() { //Kod... } } public class Oracle extends Database { @override public void connection() { //Kod... } } abstract class Database { abstract public void connect(); public String errorMesajı() { return "Error Çıxdı"; } }[/code] Kodumuzda ise aşağdaki kimi olsun... [code]Database db; if(istifadeci seçir MySql) { db=new Mysql(); } else if(istifadeçi seçir Oracle) { db=new Oracle(); } [/code] //bundan sonra yazacağın kodlar ise db ile elemek istediyin bütün emeliyyatlar üçün eyni olacaq heresi üçün ayrı ayrı uzun kodlar yazmalı olmayacaqsan. [code]db.connect(); if(nese problem varsa) { db.errorMesajı(); } [/code] Gördüyün kimi abstract metodun kömeyiynen yazmalı olduğumuz kodlar olduqça azalır. Bundan elave fikir verdinse errorMesajı adında abstract olmayan bir metod da yazdıq. Abstract sinifler abstract olmayan metodlara da sahip olabiler bu metodun içinde de bütün db ler üçün eyni olan error mesajını yazdırırıq. MySql ve Oracle siniflerimiz bu metodları override elemeden olduğu kimi işledebilerler bu da eyni kodları yazmaqdan qurtarır bizi kodumuzu sadeleştirmeye kömek edir.

Ferid Mövsümov (2012-02-11 02:39:47)
Abstract method ele bir metoddur ki bu metoddan obyekt (instance) yaradabilmersen. Abstract metodu extend eliyende onun bütün abstract metodlarını override elemek mecburiyyetindesen. Bunu esasen bir anlaşma olaraq fikirleşsen daha yaxşı başa düşersen eğer bir abstract metoddan extend edirsense öz sinifivi sen razılıq verirsenki menim sinifim o metodun bütün abstract metodlarına sahib olacaq. Bunların nece işledileceğiyle bağlı bir yazı yazmışdım blogumda aşağdaki linklerden baxabilersen http://developersland.net/index.php/interfaceabstractfark.html

Elvin Hacı (2012-02-11 00:41:58)
Buradan çox faydalı cavablar oxuya bilərsiniz: http://cavablar.net/2011/03/29/object-yonlu-proqramlasdirma-2/ Qane etməsə yəqin yeni cavab verən ekspertlərimiz olacaq.

Mövzu üzrə bənzər suallara da baxa bilərsiniz.

jQuery-də funksiya və ya metodun içində asinxronluğun söndürülməsi