Синфларнинг ворислик механизми дастурчиларга кодларни ташкил қилиш ва улардан кўп марта фойдаланишда жуда катта имкониятлар тақдим этади. Конкрет лойиҳалар учун энг мақбул воситаларни танлаш уларнинг ишлаши ва ўзаро муносабатларини билишга асосланади.
Тимоти Бадд [1] ворислик шаклларини диққатга эътиборли синфификациясини келтиради. Ворислик шакллари уларни нима мақсадда фойдаланишни белгилаб беради. Бадднинг фикрига кўра, авлод синфларни қуйидаги аломатларга кўра ҳосил қилиш мумкин.
Махсуслаштириш.Авлод-синф аждод синфнинг махсуслаштирилган шакли бўлиб, авлод-синфларда шунчаки методлар қайта аниқланади.
Спецификация. Авлод-синф аждод синфда тавсфиланган ҳулқни амалга оширади. С# дастурлаш тилида бу шакл абстракт синфдан ворислик тарзида амалга оширилади.
Қуриш.Авлод-синф базавий синф методларидан фойдаланади, аммо унинг ост типи бўлмайди.
Кенгайтириш. Авлод-синфга аждод синф имкониятларини кенгайтирган холда янги методларни қўшиш мумкин.
Ўзгартиришлар. Базавий синф ва авлод-синф бир мавзу остидаги ўзгартиришлардан иборат бўлади, аммо "синф-остсинф" боғланиши иҳтиёрий, масалан, "квадрат-тўғри тўртбурчак" ёки "тўғри тўртбурчак-квадрат". Бу шакл амалда қуришдан фарқ қилмайди, чунки авлод-синф "базавий синф методларидан фойдаланади , аммо унинг ост типи эмас".
Ичига кириш – бу синфларни лойиҳалашда альтернатив ворислик ҳисобланади ва бунда бир синф ўз ичига синф бўлган майдонни олади.. Масалан, агар синф "двигатель" бўлиб, "самолет" синфини тавсифлашга тўғри келса, двигателни шу синфнинг аждоди қилиб эмас, балки майдони қилиб тайинлаш мақсадга мувофиқ бўлади. Ичига кириш “X нинг ичида Y yiotadi” yoki “X ning asosida Y amalgam oshiriladi” муносабатига мос келади ва одатда “ичига киритиш-вакил юбориш” модели остида амалга оширилади (14.2.4-листинг).
using System;
namespace ConsoleApplication1
{
class Двигатель
{ public void Запуск()
{
Console.WriteLine( "Vjjjj!!" );
}
}
class Samolyot
{ public Samolyot()
{
Chap = new Dvigatel();
Ung = new Dvigatel ();
}
public void Dvigatellarni_ishga _tushirish()
{
chap.ishlatish();
ung.ishlatish();
}
Dvigatel chap, ung;
}
class Class1
{ static void Main()
{
Samolyot АN24_1 = new Samolyot();
АN24_1. Dvigatellarni_ishga _tushirish ();
}
}
}
21.2.2-lшsting. Ичига киритиш-вакил юбориш модели.
Дастурнинг натижаси қуйидагича:
Vjjjj!!
Vjjjj!!
Dvigatellarni_ishga _tushirish() методида двигателларни ишга тушириш ҳақидаги сўровнома ички синфга узатилади (одатда “вакил қилиб юборади” дейиш қабул қилинган).
Объектга асосланган лойиҳаларни ишлаб чиқиш жараёнида кўпинча синф ва объектлар ўртасидаги турли муносабатларни тавсифлаш учун UML дастурлаш тилидан фойдаланилади.