JavaRush /Курсхо /All lectures for TG purposes /Меросият. Афзалиятҳои меросият

Меросият. Афзалиятҳои меросият

All lectures for TG purposes
Сатҳи , Дарс
дастрас

— Салом, Амиго! Ҳоло як мавзӯъе ҳаст, ки ман фикр мекунам, ту аксар вақт аз он истифода хоҳӣ бурд. Ин – меросият.

Барномасозӣ барои одамони ноогоҳ аз ҷодугарӣ фарқ надорад. Бинобар ин, ман бо чунин як мисоли ҷолиб оғоз мекунам…

Тасаввур кун, ки ту ҷодугар ҳастӣ ва мехоҳӣ аспи парвозкунанда созӣ. Аз як тараф, ту метавонӣ кӯшиш кунӣ пегасро ҷоду кунӣ. Аммо, чунки пегасҳо дар табиат вуҷуд надоранд, ин хеле душвор хоҳад шуд. Бояд хеле зиёд кор кунӣ. Куда осонтар аст, ки аспро бигирӣ ва болҳо барои он зам кунӣ.

Меросият. Афзалиятҳои меросият - 1

Дар барномасозӣ чунин раванд меросият номида мешавад. Тасаввур кун ба ту лозим аст, ки як синфи хеле душворро нависӣ. Нависдан аз сифр вақти зиёд мегирад, пас бояд онро дар вақти зиёд санҷед ва хатогиҳоро ҷустуҷӯ кунед. Чаро бо роҳи душвортарин равӣ? Беҳтар аст ҷустуҷӯ кунӣ, ки оё чунин синф аллакай вуҷуд дорад?

Тасаввур кун, ки ту синферо пайдо кардӣ, ки 80% функсионалӣи лозимашро иҷро мекунад. Ту метавонӣ коди онро ба синфи худ нусхабардорӣ кунӣ. Аммо чунин ҳалли масъала якчанд камбудӣ дорад:

1) Синфи ёфтшуда аллакай метавонад ба байт-код компилятсия шуда бошад ва дастрасӣ ба коди сарчашмавиаш надорӣ.

2) Коди сарчашмаи синф вуҷуд дорад, аммо ту дар ширкате кор мекунӣ, ки метавонад барои истифодаи ҳатто 6 сатри коди каси дигар ба додгоҳ кашида шавад. Ва баъд онҳо туро ба додгоҳ хоҳанд кашид.

3) Такрори нолозими забони коди зиёд. Ғайр аз ин, агар муаллифи синфи каси дигар дар он хатогиро ёбад ва онро ислоҳ кунад, ин хатогӣ барои ту боқӣ хоҳад монд.

Як ҳалли боҳтар вуҷуд дорад ва бе зарурати дастрасӣ гирифтани қонунии коди синфи аслии мавҷуда. Дар Java ту метавонӣ танҳо ҳамон синфро падари синфи худ эълон кунӣ. Ин ба тавре хоҳад буд, ки ту коди он синфро ба коди худ илова кунӣ. Дар синфи ту ҳама маълумотҳо ва ҳамаи методҳои синфи падар пайдо мешаванд. Масалан, метавон чунин кард: аз "аспи" мерос мегирем, "болҳо"-ро илова мекунем — "пегас" мегирем.

Меросият. Афзалиятҳои меросият - 2

— Хеле ҷолиб, идома деҳ.

— Меросро барои ҳадафҳои дигар низ истифода бурдан мумкин аст. Масалан, ту даҳ синф дорӣ, ки хеле ба ҳам монанданд, маълумотҳо ва методҳои якхеларо доранд. Ту метавонӣ синфи махсусеро эҷод кунӣ, ки ин маълумотҳоро (ва методҳое, ки бо онҳо кор мекунанд) ба ин синфи асосӣ барорӣ ва ин даҳ синфро авлодони он эълон кунӣ. Яъне дар ҳар як синф нишон диҳӣ, ки дар он синфи падарӣ вуҷуд дорад – ин синфи асосӣ.

Ҳамчунин, тавре ки афзалиятҳои абстраксия танҳо дар баробари инкапсулятсия ошкор мешаванд, инчунин афзалиятҳои меросият дар истифодаи полиморфизм хеле қавитар мешаванд. Аммо ман дар бораи он фардо нақл мекунам. Имрӯз мо якчанд мисолҳои истифодаи меросро баррасӣ мекунем.

Тасаввур кун, ки мо барномае менависем, ки бо корбар шоҳмот бозӣ мекунад, пас ба мо синфҳо барои фигураҳо лозим мешаванд. Чӣ гуна синфҳо пешниҳод мекардӣ, Амиго?

— Шоҳ, Ферз, Фил, Асп, Рух ва Пиёда.

— Аъло. Ҳеҷ чизро фаромӯш накардӣ.

— Ва чӣ маълумотҳоро ту пешниҳод мекардӣ, ки дар ин синфҳо маҳфуз дорӣ?

— Координатҳои x ва y, инчунин арзиши он (worth). Зеро баъзе фигураҳо арзишмандтар аз дигарон мебошанд.

— Ва фарқиятҳои ин синфҳо дар чӣ ҳастанд?

— Фарқиятҳо дар тарзи ҳаракат кардани онҳо, фигураҳо мебошанд. Дар рафтор.

— Бале. Ҳамин тавр онҳоро дар шакли синфҳо тасвир кардан мумкин аст

class King
{
int x;
int y;
int worth;
void kingMove()
{
//код, решающий,
//как пойдет король
}
}
class Queen
{
int x;
int y;
int worth;
void queenMove()
{
//код, решающий,
//как пойдет ферзь
}
}
class Rook
{
int x;
int y;
int worth;
void rookMove()
{
//код, решающий,
//как пойдет ладья
}
}
class Knight
{
int x;
int y;
int worth;
void knightMove()
{
//код, решающий,
//как пойдет конь
}
}
class Bishop
{
int x;
int y;
int worth;
void bishopMove()
{
//код, решающий,
//как пойдет слон
}
}
class Pawn
{
int x;
int y;
int worth;
void pawnMove()
{
//код, решающий, 
//как пойдет пешка
}
}

— Ҳамин тавр ман онро менавиштам.

— Ва, чӣ гуна мумкин буд коди онро бо ёрии мерос кӯтоҳ кард. Мо метавонистем методҳо ва маълумотҳои якхеларо ба синфи умумӣ барорем. Номи онро ChessItem мегузорем. Объектҳои синфи ChessItem мантиқ дорад, ки эҷод нашаванд, зеро барои он ҳеҷ фигураи шоҳмот мувофиқ нест, аммо аз он бисёр манфиат буд:

class King extends ChessItem
{
void kingMove()
{
//код, решающий,
//как пойдет король
}
}
class Queen extends ChessItem
{
void queenMove()
{
//код, решающий,
//как пойдет ферзь
}
}
class Rook extends ChessItem
{
void rookMove()
{
//код, решающий,
//как пойдет ладья
}
}
 class ChessItem
{
int x;
int y;
int worth;
}
 
class Knight extends ChessItem
{
void knightMove()
{
//код, решающий,
//как пойдет конь
}
}
class Bishop extends ChessItem
{
void bishopMove()
{
//код, решающий,
//как пойдет слон
}
}
class Pawn extends ChessItem
{
void pawnMove()
{
//код, решающий,
//как пойдет пешка
}
}

— Чӣ қадар ҷолиб аст.

— Дуруст! Хусусан, вақте ки дар лоиҳа ҳазорҳо объектҳои гуногун ва садҳо синфҳо вуҷуд доранд, манфиатҳои зиёд мегирем. Пас, бо синфҳои дуруст интихобшуда на танҳо метавонем мантиқро хеле содда кунем, балки кодро садҳо маротиба кӯтоҳ кунем.

— Ва барои мерос гирифтан аз кадом синф чӣ лозим аст?

— Барои ин пас аз эълони синфи худ бояд калимаи калидӣ extends нависем ва номи синфи падариро ишора кунем. Мерос гирифтан мумкин аст танҳо аз як синф.

Меросият. Афзалиятҳои меросият - 3

Дар тасвир мо "гов"-ро мебинем, ки аз "хук" мерос гирифтааст. "Хук" аз "мурғ", "мурғ" аз "тухм". Танҳо як падар! Чунин меросият на ҳама вақт мантиқӣ аст. Аммо агар танҳо хук бошаду гови лозим, барноманавис аксар вақт наметавонад аз хоҳиши "гов"-ро аз "хук" чизи дигар кардан ба даст орад.

— Ва агар хоҳиш дошта бошам аз ду синф мерос гирам. Оё чизи муҳим вуҷуд дорад?!

— Қариб чизе нест. Мероси бисёрсинфӣ дар Java нест: синф метавонад танҳо як синфи падарӣ дошта бошад. Аммо мероси бисёрсоҳати интерфейсҳо ҳаст. Ин каме муҳити мушкилотро коҳиш медиҳад.

— Фаҳмо. Ва интерфейс чист?

— Дар бораи интерфейсҳо ман фардо нақл мекунам, аммо ҳоло биёед идома диҳем бо меросият.

Шарҳҳо
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION