14 polimorfizmi dhe përdorimi i tij në programe. JAVA Konceptet e programimit të orientuar drejt objekteve

s_a_p 20 gusht 2008 në orën 19:09

Polimorfizmi për fillestarët

  • PHP

Polimorfizmi është një nga tre paradigmat kryesore të OOP. Shkurtimisht, polimorfizmi është aftësia e një objekti për të përdorur metoda të një klase të prejardhur që nuk ekziston në kohën kur krijohet ajo bazë. Për ata që nuk janë veçanërisht të ditur në OOP, kjo ndoshta tingëllon e ndërlikuar. Prandaj, le të shohim përdorimin e polimorfizmit duke përdorur një shembull.

Formulimi i problemit

Le të supozojmë se siti ka nevojë për tre lloje botimesh - lajme, njoftime dhe artikuj. Ata janë të ngjashëm në disa mënyra - të gjitha kanë një titull dhe tekst, lajmet dhe njoftimet kanë një datë. Në një farë mënyre ato janë të ndryshme - artikujt kanë autorë, lajmet kanë burime dhe reklamat kanë një datë pas së cilës ato bëhen të parëndësishme.

Opsionet më të thjeshta që ju vijnë në mendje janë të shkruani tre klasa të veçanta dhe të punoni me to. Ose shkruani një klasë që do të përmbajë të gjitha vetitë e natyrshme në të tre llojet e botimeve dhe do të përdoren vetëm ato të nevojshme. Por për lloje të ndryshme, metodat që janë të ngjashme në logjikë duhet të funksionojnë ndryshe. Bërja e disa metodave të të njëjtit lloj për lloje të ndryshme (get_news, get_announcements, get_articles) është krejtësisht injorante. Kjo është ajo ku polimorfizmi vjen në ndihmë.

Klasa abstrakte

Përafërsisht, kjo është një klasë shabllon. Ai zbaton funksionalitetin vetëm në nivelin në të cilin njihet aktualisht. Klasat e prejardhura e plotësojnë atë. Por, është koha për të kaluar nga teoria në praktikë. Më lejoni të bëj një rezervim menjëherë: ne po shqyrtojmë një shembull primitiv me funksionalitet minimal. Të gjitha shpjegimet janë në komentet në kod.

Publikimi i klasës abstrakte
{
// tabelë që ruan të dhënat në element
i mbrojtur $tabela ;

// vetitë e elementit janë të panjohura për ne
të mbrojtura $properties = array();

// konstruktor

{
// vini re se ne nuk e dimë se nga cila tabelë duhet të marrim të dhënat
$result = mysql_query ("SELECT * FROM `" . $this -> tabela . "` WHERE `id`="" . $id . "" LIMIT 1" );
// as ne nuk e dimë se çfarë të dhënash kemi marrë
$this -> pronat = mysql_fetch_assoc ($result );
}

Metoda //, e njëjtë për çdo lloj publikimi, kthen vlerën e pronës
funksioni publik get_property ($name)
{
if (isset($this -> vetitë [ $name ]))
ktheni $this -> pronat [ $name ];

Kthehu false;
}

Metoda //, e njëjtë për çdo lloj publikimi, përcakton vlerën e vetive
funksioni publik set_property ($name, $value)
{
nëse (!isset($this -> vetitë [ $name ]))
kthej false;

$this -> vetitë [ $name ] = $value ;

Ktheni $value ;
}

// dhe kjo metodë duhet të printojë botimin, por ne nuk e dimë saktësisht se si ta bëjmë këtë, dhe për këtë arsye ne e deklarojmë atë abstrakt
funksion abstrakt publik do_print();
}

Klasat e prejardhura

Tani mund të vazhdoni në krijimin e klasave të prejardhura që zbatojnë funksionalitetin që mungon.

class News zgjeron Publikimin
{
// konstruktor i klasës së lajmeve, që rrjedh nga klasa e publikimeve
funksioni publik __ndërtimi ($id)
{
// vendosni vlerën e tabelës në të cilën ruhen të dhënat e lajmeve
$this -> table = "news_table" ;
prind :: __konstrukt ($id );
}

Funksioni publik do_print()
{
echo $this -> vetitë ["titulli"];
jehonë"

" ;
echo $this -> vetitë ["tekst"];
jehonë"
Burimi: " . $this -> pronat [ "burimi" ];
}
}

Njoftimi i klasës zgjat Publikimin
{
// konstruktori i klasës ad që rrjedh nga klasa e publikimit
funksioni publik __ndërtimi ($id)
{
// vendosni vlerën e tabelës në të cilën ruhen të dhënat e reklamave
$this -> table = "njoftimet_tabela" ;
// thirrni konstruktorin e klasës mëmë
prind :: __konstrukt ($id );
}

// anashkaloni metodën e printimit abstrakt
funksioni publik do_print()
{
echo $this -> vetitë ["titulli"];
jehonë "
Kujdes! Njoftimi është i vlefshëm deri në "
. $this -> vetitë ["data_fundit" ];
jehonë"

" . $this -> vetitë [ "tekst" ];
}
}

Artikulli i klasës zgjeron Publikimin
{
// konstruktori i klasës së artikullit, që rrjedh nga klasa e publikimit
funksioni publik __ndërtimi ($id)
{
// vendosni vlerën e tabelës në të cilën ruhen të dhënat për artikujt
$this -> table = "articles_tabela" ;
// thirrni konstruktorin e klasës mëmë
prind :: __konstrukt ($id );
}

// anashkaloni metodën e printimit abstrakt
funksioni publik do_print()
{
echo $this -> vetitë ["titulli"];
jehonë"

" ;
echo $this -> vetitë ["tekst"];
jehonë"
" . $this -> pronat [ "autor" ];
}
}

Tani në lidhje me përdorimin

Çështja është se i njëjti kod përdoret për objekte të klasave të ndryshme.

// plotësoni grupin e publikimit me objekte që rrjedhin nga Publikimi
$publikime = Lajme të reja ($news_id);
$publikime = Njoftim i ri ($announcement_id);
$publikime = artikull i ri($article_id);

Foreach ($publications si $publication) (
// nëse punojmë me trashëgimtarët e Botimit
nëse ($publication instanceof Publication) (
// pastaj printoni të dhënat
$publikim -> do_print();
) tjeter (
// përjashtimi ose trajtimi i gabimeve
}
}

Kjo eshte e gjitha. Me një lëvizje të lehtë të dorës, pantallonat kthehen në pantallona të shkurtra elegante :-).

Përfitimi kryesor i polimorfizmit është lehtësia me të cilën mund të krijoni klasa të reja që "sillen" në mënyrë të ngjashme me ato të lidhura, gjë që, nga ana tjetër, ju lejon të arrini shtrirjen dhe modifikueshmërinë. Artikulli tregon vetëm një shembull primitiv, por edhe ai tregon se si përdorimi i abstraksioneve mund ta bëjë më të lehtë zhvillimin. Ne mund të punojmë me lajmet njësoj si me reklamat ose artikujt, dhe as nuk duhet të dimë se me çfarë po punojmë! Në aplikacionet reale, shumë më komplekse, ky përfitim është edhe më i madh.

Pak teori

  • Metodat që kërkojnë mbivendosje quhen abstrakte. Është logjike që nëse një klasë përmban të paktën një metodë abstrakte, atëherë ajo është gjithashtu abstrakte.
  • Natyrisht, një objekt i një klase abstrakte nuk mund të krijohet, përndryshe nuk do të ishte abstrakt.
  • Një klasë e prejardhur ka veti dhe metoda që i përkasin klasës bazë, dhe gjithashtu mund të ketë metodat dhe vetitë e veta.
  • Një metodë që anashkalohet në një klasë të derivuar quhet metodë virtuale. Nuk ka asnjë informacion për këtë metodë në klasën abstrakte bazë.
  • Qëllimi i abstraksionit është të përcaktojë një metodë në vendin ku ka informacionin më të plotë se si duhet të funksionojë.
UPD: Në lidhje me shkeljet sql-inj dhe MVC - zotërinj, ky është vetëm një shembull, dhe një shembull i polimorfizmit, në të cilin nuk e konsideroj të nevojshme t'u kushtoj vëmendje këtyre gjërave. Kjo është një temë për artikuj krejtësisht të ndryshëm.

Polimorfizmi është një nga tre paradigmat kryesore të OOP. Shkurtimisht, polimorfizmi është aftësia e një objekti për të përdorur metoda të një klase të prejardhur që nuk ekziston në kohën kur krijohet ajo bazë. Për ata që nuk janë veçanërisht të ditur në OOP, kjo ndoshta tingëllon e ndërlikuar. Prandaj, le të shohim përdorimin e polimorfizmit duke përdorur një shembull.

Formulimi i problemit

Le të supozojmë se siti ka nevojë për tre lloje botimesh - lajme, njoftime dhe artikuj. Ata janë të ngjashëm në disa mënyra - të gjitha kanë një titull dhe tekst, lajmet dhe njoftimet kanë një datë. Në një farë mënyre ato janë të ndryshme - artikujt kanë autorë, lajmet kanë burime dhe reklamat kanë një datë pas së cilës ato bëhen të parëndësishme.

Opsionet më të thjeshta që ju vijnë në mendje janë të shkruani tre klasa të veçanta dhe të punoni me to. Ose shkruani një klasë që do të përmbajë të gjitha vetitë e natyrshme në të tre llojet e botimeve dhe do të përdoren vetëm ato të nevojshme. Por për lloje të ndryshme, metodat që janë të ngjashme në logjikë duhet të funksionojnë ndryshe. Bërja e disa metodave të të njëjtit lloj për lloje të ndryshme (get_news, get_announcements, get_articles) është krejtësisht injorante. Kjo është ajo ku polimorfizmi vjen në ndihmë.

Klasa abstrakte

Përafërsisht, kjo është një klasë shabllon. Ai zbaton funksionalitetin vetëm në nivelin në të cilin njihet aktualisht. Klasat e prejardhura e plotësojnë atë. Por, është koha për të kaluar nga teoria në praktikë. Më lejoni të bëj një rezervim menjëherë: ne po shqyrtojmë një shembull primitiv me funksionalitet minimal. Të gjitha shpjegimet janë në komentet në kod.

Publikimi i klasës abstrakte
{
// tabelë që ruan të dhënat në element
i mbrojtur $tabela ;

// vetitë e elementit janë të panjohura për ne
të mbrojtura $properties = array();

// konstruktor

{
// vini re se ne nuk e dimë se nga cila tabelë duhet të marrim të dhënat
$result = mysql_query ("SELECT * FROM `" . $this -> tabela . "` WHERE `id`="" . $id . "" LIMIT 1" );
// as ne nuk e dimë se çfarë të dhënash kemi marrë
$this -> pronat = mysql_fetch_assoc ($result );
}

Metoda //, e njëjtë për çdo lloj publikimi, kthen vlerën e pronës
funksioni publik get_property ($name)
{
if (isset($this -> vetitë [ $name ]))
ktheni $this -> pronat [ $name ];

Kthehu false;
}

Metoda //, e njëjtë për çdo lloj publikimi, përcakton vlerën e vetive
funksioni publik set_property ($name, $value)
{
nëse (!isset($this -> vetitë [ $name ]))
kthej false;

$this -> vetitë [ $name ] = $value ;

Ktheni $value ;
}

// dhe kjo metodë duhet të printojë botimin, por ne nuk e dimë saktësisht se si ta bëjmë këtë, dhe për këtë arsye ne e deklarojmë atë abstrakt
funksion abstrakt publik do_print();
}

Klasat e prejardhura

Tani mund të vazhdoni në krijimin e klasave të prejardhura që zbatojnë funksionalitetin që mungon.

class News zgjeron Publikimin
{
// konstruktor i klasës së lajmeve, që rrjedh nga klasa e publikimeve
funksioni publik __ndërtimi ($id)
{
// vendosni vlerën e tabelës në të cilën ruhen të dhënat e lajmeve
$this -> table = "news_table" ;
prind :: __konstrukt ($id );
}

Funksioni publik do_print()
{
echo $this -> vetitë ["titulli"];
jehonë"

" ;
echo $this -> vetitë ["tekst"];
jehonë"
Burimi: " . $this -> pronat [ "burimi" ];
}
}

Njoftimi i klasës zgjat Publikimin
{
// konstruktori i klasës ad që rrjedh nga klasa e publikimit
funksioni publik __ndërtimi ($id)
{
// vendosni vlerën e tabelës në të cilën ruhen të dhënat e reklamave
$this -> table = "njoftimet_tabela" ;
// thirrni konstruktorin e klasës mëmë
prind :: __konstrukt ($id );
}

// anashkaloni metodën e printimit abstrakt
funksioni publik do_print()
{
echo $this -> vetitë ["titulli"];
jehonë "
Kujdes! Njoftimi është i vlefshëm deri në "
. $this -> vetitë ["data_fundit" ];
jehonë"

" . $this -> vetitë [ "tekst" ];
}
}

Artikulli i klasës zgjeron Publikimin
{
// konstruktori i klasës së artikullit, që rrjedh nga klasa e publikimit
funksioni publik __ndërtimi ($id)
{
// vendosni vlerën e tabelës në të cilën ruhen të dhënat për artikujt
$this -> table = "articles_tabela" ;
// thirrni konstruktorin e klasës mëmë
prind :: __konstrukt ($id );
}

// anashkaloni metodën e printimit abstrakt
funksioni publik do_print()
{
echo $this -> vetitë ["titulli"];
jehonë"

" ;
echo $this -> vetitë ["tekst"];
jehonë"
" . $this -> pronat [ "autor" ];
}
}

Tani në lidhje me përdorimin

Çështja është se i njëjti kod përdoret për objekte të klasave të ndryshme.

// plotësoni grupin e publikimit me objekte që rrjedhin nga Publikimi
$publikime = Lajme të reja ($news_id);
$publikime = Njoftim i ri ($announcement_id);
$publikime = artikull i ri($article_id);

Foreach ($publications si $publication) (
// nëse punojmë me trashëgimtarët e Botimit
nëse ($publication instanceof Publication) (
// pastaj printoni të dhënat
$publikim -> do_print();
) tjeter (
// përjashtimi ose trajtimi i gabimeve
}
}

Kjo eshte e gjitha. Me një lëvizje të lehtë të dorës, pantallonat kthehen në pantallona të shkurtra elegante :-).

Përfitimi kryesor i polimorfizmit është lehtësia me të cilën mund të krijoni klasa të reja që "sillen" në mënyrë të ngjashme me ato të lidhura, gjë që, nga ana tjetër, ju lejon të arrini shtrirjen dhe modifikueshmërinë. Artikulli tregon vetëm një shembull primitiv, por edhe ai tregon se si përdorimi i abstraksioneve mund ta bëjë më të lehtë zhvillimin. Ne mund të punojmë me lajmet njësoj si me reklamat ose artikujt, dhe as nuk duhet të dimë se me çfarë po punojmë! Në aplikacionet reale, shumë më komplekse, ky përfitim është edhe më i madh.

Pak teori

  • Metodat që kërkojnë mbivendosje quhen abstrakte. Është logjike që nëse një klasë përmban të paktën një metodë abstrakte, atëherë ajo është gjithashtu abstrakte.
  • Natyrisht, një objekt i një klase abstrakte nuk mund të krijohet, përndryshe nuk do të ishte abstrakt.
  • Një klasë e prejardhur ka veti dhe metoda që i përkasin klasës bazë, dhe gjithashtu mund të ketë metodat dhe vetitë e veta.
  • Një metodë që anashkalohet në një klasë të derivuar quhet metodë virtuale. Nuk ka asnjë informacion për këtë metodë në klasën abstrakte bazë.
  • Qëllimi i abstraksionit është të përcaktojë një metodë në vendin ku ka informacionin më të plotë se si duhet të funksionojë.
UPD: Në lidhje me shkeljet sql-inj dhe MVC - zotërinj, ky është vetëm një shembull, dhe një shembull i polimorfizmit, në të cilin nuk e konsideroj të nevojshme t'u kushtoj vëmendje këtyre gjërave. Kjo është një temë për artikuj krejtësisht të ndryshëm.

Polimorfizmi gjenetik është një gjendje në të cilën ekziston një diversitet afatgjatë i gjeneve, por frekuenca e gjenit më të rrallë në popullatë është më shumë se një përqind. Ruajtja e tij ndodh për shkak të mutacionit të vazhdueshëm të gjeneve, si dhe rikombinimit të tyre të vazhdueshëm. Sipas hulumtimeve të kryera nga shkencëtarët, polimorfizmi gjenetik është bërë i përhapur, sepse mund të ketë disa milionë kombinime gjenesh.

Stoku i madh

Përshtatja më e mirë e një popullate në një mjedis të ri varet nga një furnizim i madh i polimorfizmit, dhe në këtë rast evolucioni ndodh shumë më shpejt. Nuk është praktike të vlerësohet i gjithë numri i aleleve polimorfike duke përdorur metoda gjenetike tradicionale. Kjo për faktin se prania e një gjeni të caktuar në gjenotip arrihet duke kryqëzuar individë që kanë karakteristika të ndryshme fenotipike të përcaktuara nga gjeni. Nëse e dini se cila pjesë e një popullate të caktuar përbëhet nga individë me fenotipe të ndryshme, atëherë bëhet e mundur të përcaktohet numri i aleleve nga i cili varet formimi i një tipari të veçantë.

Si filloi gjithçka?

Gjenetika filloi të zhvillohet me shpejtësi në vitet '60 të shekullit të kaluar, ishte atëherë që filluan të përdoren enzimat në xhel, gjë që bëri të mundur përcaktimin e polimorfizmit gjenetik. Çfarë është kjo metodë? Është me ndihmën e saj që proteinat lëvizin në një fushë elektrike, e cila varet nga madhësia e proteinës që lëviz, konfigurimi i saj, si dhe ngarkesa totale në pjesë të ndryshme të xhelit. Pas kësaj, në varësi të vendndodhjes dhe numrit të njollave që shfaqen, identifikohet substanca e identifikuar. Për të vlerësuar polimorfizmin e proteinave në një popullatë, ia vlen të ekzaminohen afërsisht 20 ose më shumë lokuse. Pastaj, duke përdorur një metodë matematikore, përcaktohet numri dhe raporti i homo- dhe heterozigoteve. Sipas hulumtimit, disa gjene mund të jenë monomorfikë, ndërsa të tjerët mund të jenë jashtëzakonisht polimorfikë.

Llojet e polimorfizmit

Koncepti i polimorfizmit është jashtëzakonisht i gjerë, ai përfshin një variant kalimtar dhe të balancuar. Kjo varet nga vlera selektive e gjenit dhe seleksionimi natyror, i cili ushtron presion mbi popullatën. Përveç kësaj, ajo mund të jetë gjenetike dhe kromozomale.

Polimorfizmi i gjenit dhe kromozomit

Polimorfizmi i gjenit përfaqësohet në trup nga më shumë se një alele një shembull i mrekullueshëm i kësaj është gjaku. Kromozomale përfaqëson dallimet brenda kromozomeve që ndodhin për shkak të devijimeve. Në të njëjtën kohë, ka dallime në rajonet heterokromatike. Në mungesë të patologjisë që do të çojë në dëmtim ose vdekje, mutacione të tilla janë neutrale.

Polimorfizmi kalimtar

Polimorfizmi kalimtar ndodh kur një alele që dikur ishte e zakonshme zëvendësohet në një popullatë nga një tjetër që i siguron bartësit të tij përshtatshmëri më të madhe (i quajtur edhe alelizem i shumëfishtë). Me një varietet të caktuar, ka një zhvendosje të drejtimit në përqindjen e gjenotipeve, për shkak të së cilës ndodh evolucioni dhe kryhet dinamika e tij. Fenomeni i mekanizmit industrial mund të jetë një shembull i mirë që karakterizon polimorfizmin kalimtar. Se çfarë tregon një flutur e thjeshtë, e cila, me zhvillimin e industrisë, ndryshoi ngjyrën e bardhë të krahëve në të errët. Ky fenomen filloi të vërehej në Angli, ku më shumë se 80 lloje fluturash u kthyen nga lule të zbehta krem ​​në ato të errëta, gjë që u vu re për herë të parë pas vitit 1848 në Mançester për shkak të zhvillimit të shpejtë të industrisë. Tashmë në 1895, më shumë se 95% e molave ​​fituan një ngjyrë të errët të krahëve të tyre. Ndryshime të tilla lidhen me faktin se trungjet e pemëve janë bërë më të tymosur, dhe fluturat me ngjyra të çelura janë bërë pre e lehtë për mëllenjët dhe robinat. Ndryshimet ndodhën për shkak të aleleve melaniste mutante.

Polimorfizëm i balancuar

Përkufizimi i "polimorfizmit të ekuilibruar" karakterizon mungesën e një ndryshimi në çdo raport numerik të formave të ndryshme të gjenotipeve në një popullatë që është në kushte të qëndrueshme mjedisore. Kjo do të thotë se nga brezi në brez raporti mbetet i njëjtë, por mund të luhatet pak brenda një vlere të caktuar, e cila është konstante. Në krahasim me polimorfizmin kalimtar, të ekuilibruar - çfarë është? Ky është kryesisht një proces statik evolucionar. I. I. Shmalhausen në vitin 1940 i dha edhe emrin heteromorfizëm ekuilibër.

Shembull i polimorfizmit të balancuar

Një shembull i qartë i polimorfizmit të ekuilibruar është prania e dy gjinive në shumë kafshë monogame. Kjo për faktin se ato kanë avantazhe të barabarta selektive. Raporti i tyre brenda një popullsie është gjithmonë i barabartë. Nëse ka poligami në një popullatë, raporti selektiv i përfaqësuesve të të dy gjinive mund të prishet, në këtë rast përfaqësuesit e një seksi ose mund të shkatërrohen plotësisht ose të eliminohen nga riprodhimi në një masë më të madhe sesa përfaqësuesit e seksit të kundërt.

Një shembull tjetër do të ishte grupi i gjakut sipas sistemit ABO. Në këtë rast, frekuenca e gjenotipeve të ndryshme në popullata të ndryshme mund të jetë e ndryshme, por në të njëjtën kohë nuk e ndryshon qëndrueshmërinë e saj nga brezi në brez. E thënë thjesht, asnjë gjenotip nuk ka një avantazh selektiv ndaj një tjetri. Sipas statistikave, meshkujt me grupin e parë të gjakut kanë jetëgjatësi më të gjatë se anëtarët e tjerë të seksit më të fortë me grupe të tjera gjaku. Së bashku me këtë, rreziku i zhvillimit të ulçerës duodenale në prani të grupit të parë është më i lartë, por mund të shpohet dhe kjo do të shkaktojë vdekjen nëse ndihma vonohet.

Bilanci gjenetik

Kjo gjendje e brishtë mund të prishet në një popullsi si pasojë e shfaqjes dhe ato duhet të ndodhin me një frekuencë të caktuar dhe në çdo gjeneratë. Studimet kanë treguar se polimorfizmat e gjeneve të sistemit hemostatik, dekodimi i të cilave e bën të qartë nëse procesi evolucionar i nxit këto ndryshime ose, anasjelltas, i kundërshton ato, janë jashtëzakonisht të rëndësishme. Nëse gjurmoni rrjedhën e procesit mutant në një popullatë të caktuar, mund të gjykoni gjithashtu vlerën e tij për përshtatje. Mund të jetë e barabartë me një nëse mutacioni nuk përjashtohet gjatë procesit të përzgjedhjes dhe nuk ka pengesa për përhapjen e tij.

Shumica e rasteve tregojnë se vlera e gjeneve të tilla është më pak se një, dhe në rastin e paaftësisë së mutantëve të tillë për t'u riprodhuar, gjithçka zbret në 0. Mutacionet e këtij lloji hiqen mënjanë në procesin e seleksionimit natyror, por kjo ndodh. nuk përjashtohen ndryshimet e përsëritura në të njëjtin gjen, i cili kompenson eliminimin që kryhet me përzgjedhje. Pastaj arrihet ekuilibri, gjenet e mutuara mund të shfaqen ose, anasjelltas, të zhduken. Kjo çon në një proces të ekuilibruar.

Një shembull që mund të karakterizojë qartë atë që po ndodh është anemia drapërocitare. Në këtë rast, një gjen mbizotërues i mutuar në një gjendje homozigote kontribuon në vdekjen e hershme të organizmit. Organizmat heterozigotë mbijetojnë, por janë më të ndjeshëm ndaj sëmundjes së malaries. Polimorfizmi i balancuar i gjenit të anemisë drapërocitare mund të gjurmohet në zonat e përhapjes së kësaj sëmundjeje tropikale. Në një popullatë të tillë eliminohen homozigotët (individët me të njëjtat gjene) dhe seleksionimi vepron në favor të heterozigotëve (individë me gjene të ndryshme). Për shkak të përzgjedhjes me shumë vektorë që ndodh në grupin e gjeneve të popullatës, gjenotipet mbahen në çdo gjeneratë, të cilat sigurojnë përshtatshmëri më të mirë të organizmit ndaj kushteve mjedisore. Së bashku me praninë e gjenit të anemisë drapërocitare, ekzistojnë lloje të tjera gjenesh që karakterizojnë polimorfizmin. Çfarë jep kjo? Përgjigja për këtë pyetje do të jetë një fenomen i quajtur heterozë.

Mutacionet heterozigote dhe polimorfizmi

Polimorfizmi heterozigot parashikon mungesën e ndryshimeve fenotipike në prani të mutacioneve recesive, edhe nëse ato janë të dëmshme. Por në të njëjtën kohë, ato mund të grumbullohen në një popullatë në një nivel të lartë, i cili mund të tejkalojë mutacionet e dëmshme dominuese.

procesi evolucionar

Procesi evolucionar është i vazhdueshëm dhe parakusht i tij është polimorfizmi. Çfarë do të thotë kjo është përshtatshmëria e vazhdueshme e një popullsie të caktuar me habitatin e saj. Organizmat e sekseve të ndryshme që jetojnë brenda të njëjtit grup mund të jenë në një gjendje heterozigote dhe të transmetohen nga brezi në brez për shumë vite. Së bashku me këtë, manifestimi i tyre fenotipik mund të mos ekzistojë - për shkak të rezervës së madhe të ndryshueshmërisë gjenetike.

Gjeni i fibrinogjenit

Në shumicën e rasteve, studiuesit e konsiderojnë polimorfizmin e gjenit të fibrinogjenit si një pararendës për zhvillimin e goditjes ishemike. Por për momentin po del në pah problemi në të cilin faktorët gjenetikë dhe të fituar mund të ndikojnë në zhvillimin e kësaj sëmundjeje. Ky lloj goditjeje zhvillohet për shkak të trombozës së arterieve cerebrale dhe duke studiuar polimorfizmin e gjenit të fibrinogjenit mund të kuptohen shumë procese, duke ndikuar në të cilat mund të parandalohet sëmundja. Aktualisht, shkencëtarët nuk kanë studiuar mjaftueshëm lidhjet midis ndryshimeve gjenetike dhe parametrave biokimikë të gjakut. Hulumtimet e mëtejshme do të bëjnë të mundur ndikimin në rrjedhën e sëmundjes, ndryshimin e rrjedhës së saj ose thjesht parandalimin e saj në një fazë të hershme të zhvillimit.

Përshëndetje! Ky është një artikull për një nga parimet e OOP - polimorfizmit.

Çfarë është polimorfizmi

Përkufizimi i polimorfizmit tingëllon i frikshëm :)

Polimorfizmi- kjo është mundësia e përdorimit të metodave me të njëjtin emër me grupe të njëjta ose të ndryshme parametrash në një klasë ose në një grup klasash të lidhura nga një marrëdhënie trashëgimie.

fjala " polimorfizëm"Mund të duket e ndërlikuar - por nuk është. Thjesht duhet ta ndani këtë përkufizim në pjesë dhe të tregoni me shembuj se çfarë nënkuptohet. Më besoni, në fund të artikullit ky përkufizim i polimorfizmit do t'ju duket i qartë :)

Polimorfizmi, nëse përkthehet, kjo do të thotë "Shumë forma" Për shembull, një aktor në teatër mund të provojë shumë role - ose të marrë "shumë forma".

Kodi ynë është i njëjtë - falë polimorfizmit, ai bëhet më fleksibël sesa në gjuhët e programimit që nuk përdorin parimet OOP.

Pra, për cilat forma po flasim? Le të japim fillimisht shembuj dhe të tregojmë se si polimorfizmi manifestohet në praktikë, dhe më pas të kthehemi në përkufizimin e tij.

Si shfaqet polimorfizmi?

Fakti është se nëse Java nuk do të kishte parimin e polimorfizmit, përpiluesi do ta interpretonte këtë si një gabim:

Siç mund ta shihni, metodat në foto ndryshojnë në vlerat që pranojnë:

  • së pari pranon ndër
  • dhe i dyti pranon Varg

Megjithatë, meqenëse Java përdor parimin e polimorfizmit, përpiluesi nuk do ta trajtojë këtë si një gabim sepse metoda të tilla do të konsiderohen të ndryshme:

Metodat e emërtimit të njëjta është shumë e përshtatshme. Për shembull, nëse kemi një metodë që kërkon rrënjën katrore të një numri, është shumë më e lehtë të mbani mend një emër (p.sh. sqrt ()) se një emër i veçantë për të njëjtën metodë, i shkruar për çdo lloj:

Siç mund ta shihni, ne nuk kemi pse të dalim me një emër të veçantë për secilën metodë - por gjëja kryesore është t'i kujtojmë ato! Shumë komode.

Tani mund të kuptoni pse ky parim përshkruhet shpesh me frazën:

Një ndërfaqe - shumë metoda

Kjo supozon se ne mund të plotësojmë një emër (një ndërfaqe) përmes të cilit mund të aksesojmë metoda të shumta.

Metoda e mbingarkesës

Ajo që treguam më lart - disa metoda me të njëjtin emër dhe parametra të ndryshëm - quhet mbingarkesë. Por ky ishte një shembull i mbingarkesës së metodës në një klasë. Por ekziston një rast tjetër - metodat mbizotëruese të klasës prind.

Mbështetja e metodave të prindërve

Kur trashëgojmë një klasë, ne trashëgojmë të gjitha metodat e saj. Por nëse duam të ndryshojmë ndonjë nga metodat që trashëgojmë, ne thjesht mund ta anashkalojmë atë. Ne nuk jemi të detyruar, për shembull, të krijojmë një metodë të veçantë me një emër të ngjashëm për nevojat tona, dhe metoda e trashëguar do të jetë "peshë e vdekur" në klasën tonë.

Fakti që ne mund të krijojmë një klasë në një klasë pasardhëse me të njëjtin emër si klasa që kemi trashëguar nga prindi quhet overriding.

Shembull

Le të imagjinojmë se kemi këtë strukturë:

Në krye të hierarkisë së klasës është klasa Kafshë. Ajo trashëgohet nga tre klasa - Mace, Qeni Dhe Lopë.

Klasa "Animal" ka një metodë "zë". Kjo metodë shfaq mesazhin "Zëri" në ekran. Natyrisht, as qeni dhe as macja nuk thonë "Zëri" :) Ata lehin dhe mjaullijnë. Prandaj, ju duhet të vendosni një metodë të ndryshme për klasat Mace, Qeni Dhe Lopë- në mënyrë që macja të mjaullitë, qeni të leh dhe lopa të thotë "Moo".

Prandaj, në klasat pasardhëse ne e anashkalojmë metodën zë (), në mënyrë që të marrim "Meow", "Woof" dhe "Moo" në tastierë.

  • Ju lutemi vini re: para metodës që po anashkalojmë, ne shkruajmë " @Override". Kjo i tregon kompajlerit se ne duam të anashkalojmë metodën.

Pra, çfarë është polimorfizmi

Megjithatë, polimorfizmi është një parim. Të gjithë shembujt e vërtetë që dhamë më lart janë të drejtë mënyrat zbatimi i polimorfizmit.

Le të shohim përsëri përkufizimin që dhamë në fillim të artikullit:

Polimorfizmi- aftësia për të përdorur metoda me të njëjtin emër me grupe të njëjta ose të ndryshme parametrash në një klasë ose në një grup klasash të lidhura nga një marrëdhënie trashëgimie.

Duket më qartë, apo jo? Ne treguam se si mund të:

  • krijoni "metoda me të njëjtin emër" në një klasë ("mbingarkesa e metodës")
  • ose ndryshoni sjelljen e metodave të klasës mëmë ("metodë mbizotëruese").

Të gjitha këto janë manifestime të "rritjes së fleksibilitetit" të gjuhëve të orientuara nga objekti për shkak të polimorfizmit.

Shpresojmë që artikulli ynë të ishte i dobishëm për ju. Ju mund të regjistroheni për kurset tona në Javakemi në .

Polimorfizmiështë aftësia e një lënde me përbërje të njëjtë për të ekzistuar, në bazë të kushteve të jashtme, në disa forma kristalore (modifikime polimorfike) me struktura të ndryshme (për substancat e thjeshta kjo dukuri ndonjëherë quhet alotropi).

Fenomeni i polimorfizmit u zbulua për herë të parë nga kimisti dhe mineralologu gjerman E. Mitscherlich në 1821. Polimorfizmi është i përhapur në natyrë dhe është një nga vetitë karakteristike të substancave kristalore. Modifikimet polimorfike, të ndryshme në strukturën e brendshme, prandaj kanë veti të ndryshme. Prandaj, studimi i polimorfizmit është jashtëzakonisht i rëndësishëm për praktikë.

Kushtet e jashtme që përcaktojnë polimorfizmin përfshijnë, para së gjithash, temperaturën dhe presionin, prandaj çdo modifikim polimorfik ka gamën e vet të temperaturave dhe presioneve në të cilat ai ekziston në një gjendje termodinamikisht të qëndrueshme (ekuilibër) dhe jashtë të cilit nuk mund të jetë i qëndrueshëm, megjithëse mund të ekzistojë në metastabile, d.m.th. gjendje jo ekuilibër.

Karboni, silikoni, fosfori, hekuri dhe elementë të tjerë ekzistojnë në modifikime të ndryshme polimorfike. Vetitë fizike të modifikimeve të ndryshme të së njëjtës substancë mund të ndryshojnë ndjeshëm. Për shembull, modifikimet e karbonit që kristalizohen në formën e diamantit (sistemi kub) ose në formën e grafitit (sistemi gjashtëkëndor) ndryshojnë ndjeshëm nga njëri-tjetri në vetitë fizike, pavarësisht nga identiteti i përbërjes. Nëse një transformim polimorfik shoqërohet me ndryshime të vogla në strukturë, vetitë fizike të substancës ndryshojnë në mënyrë të parëndësishme. Çdo substancë specifike duhet të ketë dy, tre ose më shumë modifikime polimorfike. Modifikime të ndryshme zakonisht shënohen me shkronja greke α, β, γ etj., me shkronjat e para që zakonisht i referohen modifikimeve që janë të qëndrueshme në temperatura më të larta.

Kur një modifikim me temperaturë të lartë shndërrohet në një me temperaturë më të ulët, zakonisht forma e jashtme origjinale e kristaleve ruhet, ndërsa struktura e brendshme e substancës pëson ndryshime. Kjo ruajtje e një forme të jashtme që nuk korrespondon me strukturën e sapoformuar të rrjetës kristalore quhet paramorfozë. Paramorfozat janë të njohura në natyrë β -kuarci (simetria trigonale) sipas α -kuarc (simetri gjashtëkëndore), kalcit CaCO 3 (simetri trigonale) në aragonit (simetri ortorhombike) etj.

Pavarësisht nga natyra e ndryshimeve strukturore që ndodhin gjatë shndërrimeve polimorfike, dallohen dy lloje të tyre: transformimet enantiotropike (të kthyeshme) dhe monotropike (të pakthyeshme).

Shndërrimi i kthyeshëm i një modifikimi në një tjetër, i kryer në presion konstant dhe një temperaturë (pikë) të caktuar kalimi, në të cilën këto modifikime janë në gjendje ekuilibri, d.m.th. po aq e qëndrueshme, e quajtur enantiotropike. Kjo mund të tregohet skematikisht si më poshtë:

α ↔ β↔ lëng

ato. tranzicioni α → β është enantiotropik. Shembuj të transformimeve polimorfike enantiotropike janë transformimet ndërmjet formave polimorfike të SiO 2 ˸

Polimorfizmi - koncepti dhe llojet. Klasifikimi dhe veçoritë e kategorisë "Polimorfizëm" 2015, 2017-2018.

  • - Polimorfizmi i individëve

    Individët njerëzorë, duke pasur një numër të vetive të përbashkëta, në të njëjtën kohë nuk janë identikë me njëri-tjetrin për sa i përket cilësive të specieve. Ata ndryshojnë nga njëri-tjetri fizikisht, mendërisht dhe socialisht. Dallime të tilla janë gjatësia, ngjyra e lëkurës dhe e flokëve, pamja e individit, ecja,... .


  • - Përçarës favorizon ruajtjen e llojeve ekstreme dhe eliminimin e atyre të ndërmjetëm. Çon në ruajtjen dhe rritjen e polimorfizmit.

  • - Diferencimi intraspecifik i njerëzimit. Racat si shprehje e polimorfizmit gjenetik të njerëzimit. Uniteti i llojeve të njerëzimit.

    DIFEENCIIMI BRENDA SPECIAVE I NJERËZIMIT: Që nga momenti i shfaqjes së H. sapiens, esenca e tij u bë socialja dhe evolucioni biologjik ndryshoi, duke u shfaqur në shfaqjen e polimorfizmit të gjerë gjenetik. Diversiteti gjenetik në nivel... .