25.07.2017 Views

Intro-CSharp-Book-v2015

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

Абстракция<br />

Няколко основни правила:<br />

Глава 21. Качествен програмен код 887<br />

- Едно и също ниво на абстракция при публични членове на класа.<br />

- Интерфейсът на класа трябва да е изчистен и ясен.<br />

- Класът описва само едно нещо.<br />

- Класът трябва да скрива вътрешната си имплементация.<br />

Кодът се развива във времето. Важно е въпреки еволюцията на класовете,<br />

техните интерфейси да не се развалят, например:<br />

class Employee<br />

{<br />

public string firstName;<br />

public string lastName;<br />

...<br />

public SqlCommand FindByPrimaryKeySqlCommand(int id);<br />

}<br />

Последният метод е несъвместим с нивото на абстракция, на което работи<br />

Employee. Потребителят на класа не трябва да знае въобще, че той работи<br />

с база от данни вътрешно.<br />

Наследяване<br />

Не скривайте методи в класовете наследници:<br />

public class Timer<br />

{<br />

public void Start() {...}<br />

}<br />

public class AtomTimer : Timer<br />

{<br />

public void Start() {...}<br />

}<br />

Методът в класа-наследник скрива реалната имплементация. Това не е<br />

препоръчително. Ако все пак това поведение е желано (в редките случаи,<br />

в които това се налага), се използва ключовата дума new.<br />

Преместете общи методи, данни, поведение колкото се може по-нагоре в<br />

дървото на наследяване. Така тази функционалност няма да се дублира<br />

и ще бъде достъпна от по-голяма аудитория.<br />

Ако имате клас, който има само един наследник, смятайте това за<br />

съмнително. Това ниво на абстракция може би е излишно. Съмнителен би<br />

бил и метод, който пренаписва такъв от базовия клас, който обаче не прави<br />

нищо повече от базовия метод.

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!