bahay - Software
JAVA Object Oriented Programming Concepts. Polymorphism - ano ito? Genetic polymorphism Polymorphism at ang paggamit nito sa mga programa

Ang genetic polymorphism ay isang kondisyon kung saan mayroong pangmatagalang pagkakaiba-iba ng mga gene, ngunit ang dalas ng pinakabihirang gene sa populasyon ay higit sa isang porsyento. Ang pagpapanatili nito ay nangyayari dahil sa patuloy na mutation ng mga gene, pati na rin ang kanilang patuloy na recombination. Ayon sa pananaliksik na isinagawa ng mga siyentipiko, ang genetic polymorphism ay naging laganap, dahil maaaring mayroong ilang milyong mga kumbinasyon ng gene.

Malaking stock

Ang mas mahusay na pagbagay ng isang populasyon sa isang bagong kapaligiran ay nakasalalay sa isang malaking supply ng polymorphism, at sa kasong ito, ang ebolusyon ay nangyayari nang mas mabilis. Hindi praktikal na tantyahin ang buong bilang ng mga polymorphic alleles gamit ang tradisyonal na genetic na pamamaraan. Ito ay dahil sa ang katunayan na ang pagkakaroon ng isang tiyak na gene sa genotype ay nakakamit sa pamamagitan ng pagtawid sa mga indibidwal na may iba't ibang mga katangian ng phenotypic na tinutukoy ng gene. Kung alam mo kung anong bahagi ng isang tiyak na populasyon ang binubuo ng mga indibidwal na may iba't ibang mga phenotypes, kung gayon posible na matukoy ang bilang ng mga alleles kung saan nakasalalay ang pagbuo ng isang partikular na katangian.

Kung paano nagsimula ang lahat?

Ang mga genetika ay nagsimulang umunlad nang mabilis noong 60s ng huling siglo, pagkatapos ay nagsimulang gamitin ang mga enzyme sa mga gel, na naging posible upang matukoy ang genetic polymorphism. Ano ang pamamaraang ito? Ito ay sa tulong nito na ang mga protina ay gumagalaw sa isang electric field, na nakasalalay sa laki ng protina na inililipat, pagsasaayos nito, pati na rin ang kabuuang singil sa iba't ibang bahagi ng gel. Pagkatapos nito, depende sa lokasyon at bilang ng mga spot na lumilitaw, natukoy ang natukoy na sangkap. Upang masuri ang polymorphism ng protina sa isang populasyon, sulit na suriin ang humigit-kumulang 20 o higit pang loci. Pagkatapos, gamit ang isang matematikal na pamamaraan, ang bilang at ratio ng homo- at heterozygotes ay tinutukoy. Ayon sa pananaliksik, ang ilang mga gene ay maaaring monomorphic, habang ang iba ay maaaring hindi pangkaraniwang polymorphic.

Mga uri ng polymorphism

Ang konsepto ng polymorphism ay napakalawak; kabilang dito ang isang transisyonal at isang balanseng variant. Depende ito sa piling halaga ng gene at natural na seleksyon, na naglalagay ng presyon sa populasyon. Bilang karagdagan, maaari itong maging genetic at chromosomal.

Gene at chromosomal polymorphism

Ang polymorphism ng gene ay kinakatawan sa katawan ng higit sa isang allele; isang kapansin-pansing halimbawa nito ay dugo. Ang Chromosomal ay kumakatawan sa mga pagkakaiba sa loob ng mga chromosome na nangyayari dahil sa mga aberration. Gayunpaman, may mga pagkakaiba sa mga heterochromatic na rehiyon. Sa kawalan ng patolohiya na hahantong sa kapansanan o kamatayan, ang mga naturang mutasyon ay neutral.

Transitional polymorphism

Ang transitional polymorphism ay nangyayari kapag ang isang allele na dating karaniwan ay pinalitan sa isang populasyon ng isa pang nagbibigay sa carrier nito ng higit na kakayahang umangkop (tinatawag ding multiple allelism). Sa isang naibigay na iba't, mayroong isang direksyon na pagbabago sa porsyento ng mga genotype, dahil sa kung saan nangyayari ang ebolusyon at ang mga dinamika nito ay isinasagawa. Ang kababalaghan ng mekanismong pang-industriya ay maaaring maging isang magandang halimbawa na nagpapakilala sa transisyonal na polymorphism. Kung ano ito ay ipinapakita ng isang simpleng paru-paro, na, sa pag-unlad ng industriya, nagbago ang puting kulay ng mga pakpak nito sa madilim. Ang hindi pangkaraniwang bagay na ito ay nagsimulang maobserbahan sa England, kung saan higit sa 80 species ng mga butterflies ang naging madilim na bulaklak mula sa maputlang cream, na unang napansin pagkatapos ng 1848 sa Manchester dahil sa mabilis na pag-unlad ng industriya. Noong 1895, higit sa 95% ng mga gamugamo ang nakakuha ng madilim na kulay ng kanilang mga pakpak. Ang ganitong mga pagbabago ay nauugnay sa katotohanan na ang mga puno ng kahoy ay naging mas mausok, at ang mga light-colored butterflies ay naging madaling biktima ng mga thrush at robin. Ang mga pagbabago ay naganap dahil sa mutant melanistic alleles.

Balanseng polymorphism

Ang kahulugan ng "balanseng polymorphism" ay nagpapakita ng kawalan ng pagbabago sa anumang numerical ratios ng iba't ibang anyo ng genotypes sa isang populasyon na nasa matatag na kondisyon sa kapaligiran. Nangangahulugan ito na mula sa henerasyon hanggang sa henerasyon ang ratio ay nananatiling pareho, ngunit maaaring bahagyang magbago sa loob ng isang tiyak na halaga, na pare-pareho. Kung ihahambing sa transisyonal, balanseng polymorphism - ano ito? Pangunahin itong isang static na proseso ng ebolusyon. I. I. Shmalhausen noong 1940 ay binigyan din ito ng pangalang equilibrium heteromorphism.

Halimbawa ng balanseng polymorphism

Ang isang malinaw na halimbawa ng balanseng polymorphism ay ang pagkakaroon ng dalawang kasarian sa maraming monogamous na hayop. Ito ay dahil sa ang katunayan na sila ay may pantay na pumipili na mga pakinabang. Ang kanilang ratio sa loob ng isang populasyon ay palaging pantay. Kung mayroong polygamy sa isang populasyon, ang selective ratio ng mga kinatawan ng parehong kasarian ay maaaring maputol, kung saan ang mga kinatawan ng isang kasarian ay maaaring ganap na masira o maalis mula sa pagpaparami sa mas malaking lawak kaysa sa mga kinatawan ng hindi kabaro.

Ang isa pang halimbawa ay ang pangkat ng dugo ayon sa sistema ng ABO. Sa kasong ito, ang dalas ng iba't ibang genotype sa iba't ibang populasyon ay maaaring magkakaiba, ngunit sa parehong oras ay hindi nito binabago ang pagiging matatag nito mula sa henerasyon hanggang sa henerasyon. Sa madaling salita, walang isang genotype ang may pumipiling kalamangan sa iba. Ayon sa istatistika, ang mga lalaking may unang pangkat ng dugo ay may mas mahabang pag-asa sa buhay kaysa sa iba pang mga miyembro ng mas malakas na pakikipagtalik sa ibang mga grupo ng dugo. Kasabay nito, ang panganib na magkaroon ng duodenal ulcer sa pagkakaroon ng unang grupo ay mas mataas, ngunit maaari itong magbutas, at ito ay magdudulot ng kamatayan kung ang tulong ay naantala.

Balanse ng genetiko

Ang marupok na estadong ito ay maaaring magambala sa isang populasyon bilang resulta ng paglitaw, at dapat itong mangyari sa isang tiyak na dalas at sa bawat henerasyon. Ipinakita ng mga pag-aaral na ang mga polymorphism ng mga gene ng sistema ng hemostatic, ang pag-decode nito ay nagpapalinaw kung ang proseso ng ebolusyon ay nagtataguyod ng mga pagbabagong ito o, sa kabaligtaran, ay sumasalungat sa kanila, ay napakahalaga. Kung masusubaybayan mo ang kurso ng proseso ng mutant sa isang partikular na populasyon, maaari mo ring hatulan ang halaga nito para sa pagbagay. Ito ay maaaring katumbas ng isa kung ang mutation ay hindi ibinukod sa panahon ng proseso ng pagpili at walang mga hadlang sa pagkalat nito.

Karamihan sa mga kaso ay nagpapakita na ang halaga ng naturang mga gene ay mas mababa sa isa, at sa kaso ng kawalan ng kakayahan ng naturang mga mutant na magparami, ang lahat ay bumaba sa 0. Ang mga mutasyon ng ganitong uri ay itinatabi sa proseso ng natural na pagpili, ngunit ito ay hindi ibubukod ang paulit-ulit na pagbabago sa parehong gene, na nagbabayad para sa pag-aalis na isinasagawa sa pamamagitan ng pagpili. Pagkatapos ay maabot ang equilibrium, maaaring lumitaw ang mga mutated genes o, sa kabaligtaran, mawala. Ito ay humahantong sa isang balanseng proseso.

Ang isang halimbawa na malinaw na mailalarawan kung ano ang nangyayari ay sickle cell anemia. Sa kasong ito, ang isang nangingibabaw na mutated gene sa isang homozygous na estado ay nag-aambag sa maagang pagkamatay ng organismo. Ang mga heterozygous na organismo ay nabubuhay ngunit mas madaling kapitan sa sakit na malaria. Ang balanseng polymorphism ng sickle cell anemia gene ay maaaring masubaybayan sa mga lugar ng pamamahagi ng tropikal na sakit na ito. Sa ganitong populasyon, ang mga homozygotes (mga indibidwal na may parehong mga gene) ay tinanggal, at ang pagpili ay kumikilos pabor sa mga heterozygotes (mga indibidwal na may iba't ibang mga gene). Dahil sa pagpili ng multi-vector na nagaganap sa gene pool ng populasyon, ang mga genotype ay pinananatili sa bawat henerasyon, na nagsisiguro ng mas mahusay na kakayahang umangkop ng organismo sa mga kondisyon sa kapaligiran. Kasama ang pagkakaroon ng sickle cell anemia gene, mayroong iba pang mga uri ng mga gene na nagpapakilala sa polymorphism. Ano ang ibinibigay nito? Ang sagot sa tanong na ito ay isang phenomenon na tinatawag na heterosis.

Heterozygous mutations at polymorphism

Ang heterozygous polymorphism ay nagbibigay ng kawalan ng mga pagbabagong phenotypic sa pagkakaroon ng recessive mutations, kahit na nakakapinsala ang mga ito. Ngunit sa parehong oras, maaari silang maipon sa isang populasyon sa isang mataas na antas, na maaaring lumampas sa nakakapinsalang nangingibabaw na mutasyon.

proseso ng ebolusyon

Ang proseso ng ebolusyon ay tuloy-tuloy, at ang kailangan nito ay polymorphism. Ang ibig sabihin nito ay ang patuloy na kakayahang umangkop ng isang partikular na populasyon sa tirahan nito. Ang mga organismo ng iba't ibang kasarian na naninirahan sa loob ng parehong grupo ay maaaring nasa isang heterozygous na estado at naililipat mula sa henerasyon hanggang sa henerasyon sa loob ng maraming taon. Kasama nito, ang kanilang phenotypic manifestation ay maaaring hindi umiiral - dahil sa malaking reserba ng genetic variability.

Fibrinogen gene

Sa karamihan ng mga kaso, isinasaalang-alang ng mga mananaliksik ang fibrinogen gene polymorphism bilang isang pasimula sa pag-unlad ng ischemic stroke. Ngunit sa ngayon, ang problema kung saan ang genetic at nakuha na mga kadahilanan ay maaaring maka-impluwensya sa pag-unlad ng sakit na ito ay darating sa unahan. Ang ganitong uri ng stroke ay bubuo dahil sa thrombosis ng cerebral arteries, at sa pamamagitan ng pag-aaral ng polymorphism ng fibrinogen gene, mauunawaan ng isa ang maraming proseso, sa pamamagitan ng pag-impluwensya kung aling sakit ang maiiwasan. Sa kasalukuyan, hindi sapat na pinag-aralan ng mga siyentipiko ang mga koneksyon sa pagitan ng mga pagbabago sa genetic at mga parameter ng biochemical ng dugo. Ang karagdagang pananaliksik ay gagawing posible na maimpluwensyahan ang kurso ng sakit, baguhin ang kurso nito, o pigilan lamang ito sa maagang yugto ng pag-unlad.

Lecture sa anyo ng isang pagtatanghal sa pdf format na may mga halimbawa - 27 slide.
Volga State Technical University, Department of POAS, - 2010

Tinatalakay ng panayam ang lahat ng anyo ng polymorphism ng mga function at pamamaraan at ipinakita ang kanilang hierarchy sa anyo ng isang diagram.

Mga sipi mula sa panayam

Ang konsepto ng polymorphism

  • Ang polymorphism sa isang programming language ay nangangahulugang maraming kahulugan ng mga variable at function
  • Ang polymorphic function ay isa na matatawag na may mga argumento ng iba't ibang uri, at ang aktwal na code na naisakatuparan ay depende sa uri ng mga argumento

Mga Pakinabang ng Paggamit ng Polymorphism

  • Ang polymorphism ay nagpapahintulot sa mga algorithm na maisulat nang isang beses lamang at pagkatapos ay muling gamitin para sa iba't ibang uri ng data na maaaring hindi pa umiiral (mga generic na aksyon o algorithm)
  • Ang polymorphism ay nagpapaliit sa konseptong espasyo, i.e. binabawasan ang dami ng impormasyong kailangang tandaan ng isang programmer

Parameterized polymorphism

  • Ibinibigay ng tinatawag na mga generic na function, na sa wikang C++ ay tinatawag na mga template
  • Ang argumento ng isang generic na function ay ang uri na ginagamit kapag sinusuri ito
  • Gamit ang mekanismo ng template, maaari kang lumikha ng isang function na gagana sa iba't ibang uri ng mga argumento
  • Ang isang halimbawa ng mga naturang function ay mga pangkalahatang algorithm mula sa STL

Purong polymorphism

  • Ang purong polymorphism ay nangyayari kapag ang parehong function ay inilapat sa mga argumento ng iba't ibang uri
  • Sa kaso ng purong polymorphism, mayroong isang function (ang katawan ng code) at ilan sa mga interpretasyon nito
  • Ang pagpapatupad ng purong polymorphism ay posible lamang kung mayroong mga polymorphic variable, o sa halip ay polymorphic na mga argumento
  • Ang purong polymorphism ay nagbibigay-daan sa pagpapatupad ng mga pangkalahatang algorithm
Overloading o ad hoc polymorphism
  • Ang overloading ay nangyayari kapag mayroong dalawa o higit pang mga code na nauugnay sa parehong pangalan
  • Ang pangunahing layunin ng labis na karga ay upang paliitin ang konseptong espasyo
Overloading na pamamaraan sa mga hindi nauugnay na klase
  • Ang lahat ng mga object-oriented na wika ay nagbibigay-daan sa paggamit ng mga pamamaraan na may parehong mga pangalan sa hindi nauugnay na mga klase - ito ay pamamaraan ng overloading
  • Sa kasong ito, ang overloaded na pangalan ay nakatali gamit ang impormasyon tungkol sa klase kung saan kabilang ang tatanggap ng mensahe

Parametric overload

  • Ang isang istilo ng overloading kung saan ang mga function at pamamaraan sa parehong konteksto ay pinapayagang magbahagi ng parehong pangalan, at ang kalabuan ay inalis sa pamamagitan ng pagsusuri sa bilang at mga uri ng mga argumento, ay tinatawag na parametric overloading.
Pamamaraan Pagpapalit
  • Nagaganap ang override kapag mayroong dalawang pamamaraan sa base at nagmula sa mga klase na may parehong pangalan at mga parameter
  • Sa kasong ito, ang base class method ay na-override ng nagmula na class method mula sa punto ng view ng user ng klase.
Layunin ng mekanismo ng pagpapalit ng pamamaraan
  • Ang pagpapalit ay nangyayari nang malinaw sa gumagamit ng klase, at, tulad ng labis na karga, ang dalawang pamamaraan ay kinakatawan ng semantiko bilang isang entity.
  • Ang pangunahing layunin ng pagpapalit ng mga pamamaraan ay upang paliitin ang konseptong espasyo
Halimbawa ng Override ng Paraan

Class MyEllipse
{
publiko:
float area() const

};


{
publiko:
float area() const
(//gumamit ng mas mahusay na algorithm ng pagkalkula
}
};

MyEllipse ellipse;
MyCircle bilog;

// Ang MyEllipse::area() na paraan ay tatawagin
ellipse.print();


// PANSIN!!! Ang MyEllipse::area() na pamamaraan ay tatawagin
circle.print();


Pamamaraan Overriding
  • Kapag nag-o-override, ang isang base class method ay ino-override ng isang derived class method sa panlabas lang. Sa loob ng klase, tinatawag ang base class method (tingnan ang nakaraang halimbawa)
  • Nangyayari ang overriding ng pamamaraan kapag pinapalitan ng isang paraan ng isang nagmula na klase ang isang pamamaraan ng isang baseng klase hindi lamang sa labas, kundi pati na rin sa loob ng klase
  • Sa wikang C++, upang i-override ang isang pamamaraan, dapat mong gamitin ang dynamic na mekanismo ng pagbubuklod, i.e. magdeklara ng isang pamamaraan na virtual
Halimbawa ng override na pamamaraan

Class MyEllipse
{
publiko:
virtual float area() const
( /* paraan ng pagkalkula ng numero */ )
void print() ( printf("lugar = %f\n", area()); )
};
klase MyCircle: pampublikong MyEllipse
{
publiko:
float area() const
( //gumamit ng mas mahusay na algorithm sa pagkalkula
bumalik 3.14*Radius1*Radius2;
}
};

MyEllipse ellipse;
MyCircle bilog;

// Ang MyEllipse::area() na paraan ay tatawagin
printf("Ellipse area= %f\n", ellipse.area());

// Ang MyEllipse::area() na paraan ay tatawagin
ellipse.print();

// Ang MyCircle::area() method ay tatawagin
printf("Lugar ng bilog= %f\n", bilog.lugar());

// PANSIN!!! Ang MyCircle::area() na pamamaraan ay tatawagin
circle.print();

Layunin ng mekanismo ng overriding na pamamaraan
  • Ang pagkakaroon ng isang mekanismo para sa mga overriding na pamamaraan ay nagpapahintulot sa iyo na ipatupad ang isang karaniwang bahagi ng pag-uugali sa batayang klase, na nagpapahiwatig na ang mga indibidwal na aksyon ay higit na tutukuyin (o-override) sa mga nagmula na klase
  • Kaya, ang pangunahing layunin ng mekanismo ng overriding na pamamaraan ay upang bawasan ang laki ng programa

Mga ipinagpaliban na pamamaraan

  • Ang isang ipinagpaliban na pamamaraan ay isang espesyal na kaso ng pag-override, kung saan ang pamamaraan ng batayang klase ay walang pagpapatupad at anumang kapaki-pakinabang na aktibidad ay tinukoy sa paraan ng klase ng bata.
Mga ipinagpaliban na pamamaraan sa wikang C++
  • Sa C++, ang isang ipinagpaliban na paraan ay dapat na tahasang ipahayag sa virtual na keyword
  • Ang katawan ng ipinagpaliban na paraan ay hindi tinukoy, sa halip ang function ay "itinalaga" sa halagang 0

Polymorphism (pagprograma)

Sa madaling sabi, ang kahulugan ng polymorphism ay maaaring ipahayag sa pariralang: "Isang interface, maraming pagpapatupad."

Ang polymorphism ay isa sa apat na pinakamahalagang mekanismo ng object-oriented programming (kasama ang abstraction, encapsulation at inheritance).

Binibigyang-daan ka ng polymorphism na magsulat ng higit pang abstract na mga programa at dagdagan ang muling paggamit ng code. Ang mga pangkalahatang katangian ng mga bagay ay pinagsama sa isang sistema, na maaaring tawaging iba - interface, klase. Ang komunidad ay may panlabas at panloob na pagpapahayag:

  • ang panlabas na pagkakatulad ay nagpapakita ng sarili bilang parehong hanay ng mga pamamaraan na may parehong mga pangalan at lagda (mga pangalan ng mga pamamaraan, mga uri ng mga argumento at ang kanilang numero);
  • panloob na pagkakatulad - ang parehong pag-andar ng mga pamamaraan. Maaari itong ilarawan nang intuitive o ipinahayag sa anyo ng mga mahigpit na batas, mga patakaran kung saan dapat sundin ang mga pamamaraan. Ang kakayahang magtalaga ng iba't ibang pag-andar sa isang pamamaraan (function, operasyon) ay tinatawag overloading ng pamamaraan (overloading ng function, labis na karga ng mga operasyon).

Mga halimbawa

Ang isang klase ng mga geometric na hugis (ellipse, polygon) ay maaaring magkaroon ng mga pamamaraan para sa mga geometric na pagbabagong-anyo (displacement, rotation, scaling).

Sa mga functional na wika

Mayroong dalawang uri ng polymorphism sa Haskell - parametric (puro) at espesyal (class-based). Espesyal ay tinatawag din ad hoc(mula sa Latin ad hoc - lalo na). Maaari silang makilala sa mga sumusunod:

Parametric polymorphism

Espesyal na polymorphism

Ang Haskell ay may dibisyon sa mga klase at pagkakataon, na hindi matatagpuan sa OOP. Tinutukoy ng klase ang isang set at mga lagda ng mga pamamaraan (marahil ay nagbibigay ng mga default na pagpapatupad para sa ilan o lahat ng mga ito), at ang mga pagkakataon ay nagpapatupad ng mga ito. Kaya, ang problema ng maramihang pamana ay awtomatikong nawawala. Ang mga klase ay hindi nagmamana o nag-o-override ng mga pamamaraan ng iba pang mga klase - ang bawat pamamaraan ay nabibilang lamang sa isang klase. Ang diskarte na ito ay mas simple kaysa sa kumplikadong diagram ng mga relasyon sa klase sa OOP. Ang isang naibigay na uri ng data ay maaaring kabilang sa ilang mga klase; ang isang klase ay maaaring mangailangan na ang bawat isa sa mga uri nito ay kinakailangang kabilang sa ibang klase, o kahit na ilang; ang parehong pangangailangan ay maaaring iharap ng isang halimbawa. Ito ay mga analogue ng maramihang mana. Mayroon ding ilang mga katangian na walang mga analogue sa OOP. Halimbawa, ang pagpapatupad ng isang listahan bilang isang halimbawa ng klase ng mga maihahambing na dami ay nangangailangan na ang mga elemento ng listahan ay kabilang din sa klase ng mga maihahambing na dami.

Ang mga programmer na lumilipat mula sa OOP patungo sa FP ay dapat magkaroon ng kamalayan sa isang mahalagang pagkakaiba sa pagitan ng kanilang mga sistema ng klase. Kung sa OOP ang isang klase ay "nakatali" sa isang bagay, ibig sabihin, sa data, pagkatapos ay sa FP ito ay nakatali sa isang function. Sa FP, ang impormasyon tungkol sa pagiging miyembro ng klase ay ipinapasa kapag tinawag ang isang function, sa halip na naka-imbak sa mga field ng object. Ang diskarte na ito, sa partikular, ay nagbibigay-daan sa amin upang malutas ang problema ng isang paraan ng ilang mga bagay (sa OOP, ang isang pamamaraan ay tinatawag sa isang bagay). Halimbawa: ang paraan ng pagdaragdag (mga numero, mga string) ay nangangailangan ng dalawang argumento, parehong may parehong uri.

Implicit na pag-type

Ang ilang mga programming language (halimbawa, Python at Ruby) ay gumagamit ng tinatawag na duck typing (iba pang pangalan: latent, implicit), na isang uri ng signature polymorphism. Kaya, halimbawa, sa Python, ang polymorphism ay hindi kinakailangang nauugnay sa mana.

Mga anyo ng polymorphism

Static at dynamic na polymorphism

(nabanggit sa klasikong aklat nina Sutter at Alexandrescu, na siyang pinagmulan).

Ang polymorphism ay maaaring maunawaan bilang ang pagkakaroon ng mga punto ng pagpapasadya sa code, kapag ang parehong piraso ng code na isinulat ng programmer ay maaaring mangahulugan ng iba't ibang mga operasyon depende sa isang bagay.

Sa isang kaso, ang partikular na kahulugan ng isang fragment ay nakasalalay sa kapaligiran kung saan binuo ang code. Ito ang tinatawag na static na polymorphism. Ang overloading ng function at mga template sa C++ ay nagpapatupad ng static polymorphism. Kung, halimbawa, ang std::sort ay tinatawag sa code ng isang template class, kung gayon ang tunay na kahulugan ng tawag ay depende sa kung aling uri ng mga parameter ang idi-deploy ang template na ito - isa sa std::sort ang tatawagin .

Sa isa pang kaso, ang tiyak na kahulugan ng isang fragment ay tinutukoy lamang sa yugto ng pagpapatupad at depende sa eksakto kung paano at saan eksakto ang bagay ay binuo. Ito ay ordinaryong, dynamic na polymorphism, na ipinatupad sa pamamagitan ng mga virtual na pamamaraan.

Pagsasama ng polymorphism

Ang polymorphism na ito ay tinatawag na purong polymorphism. Sa pamamagitan ng paggamit ng ganitong anyo ng polymorphism, ang mga kaugnay na bagay ay maaaring gamitin sa pangkalahatang paraan. Gamit ang substitution at inclusion polymorphism, maaari kang sumulat ng isang paraan upang gumana sa lahat ng uri ng mga bagay na TPerson. Gamit ang inclusion at substitution polymorphism, maaari kang magtrabaho sa anumang bagay na pumasa sa pagsubok na "is-A". Pinapasimple ng polymorphism ng pagsasama ang gawain ng pagdaragdag ng mga bagong subtype sa isang programa, dahil hindi na kailangang magdagdag ng isang tiyak na pamamaraan para sa bawat bagong uri; maaari kang gumamit ng isang umiiral na, sa pamamagitan lamang ng pagbabago ng pag-uugali ng system sa loob nito. Sa polymorphism, maaari mong gamitin muli ang isang base class; gumamit ng anumang inapo o pamamaraan na ginagamit ng batayang klase.

Parametric polymorphism

Gamit ang Parametric Polymorphism maaari kang lumikha ng mga unibersal na uri ng base. Sa kaso ng parametric polymorphism, ang function ay ipinatupad nang pantay-pantay para sa lahat ng mga uri at sa gayon ang function ay ipinatupad para sa isang arbitrary na uri. Sinasaklaw ng Parametric Polymorphism ang mga parametric na pamamaraan at uri.

Parametric na Paraan

Kung ang polymorphism sa pagsasama ay nakakaapekto sa ating pang-unawa sa isang bagay, ang parametric polymorphism ay nakakaapekto sa mga pamamaraan na ginamit, dahil posible na lumikha ng mga pamamaraan ng mga kaugnay na klase, na ipinagpaliban ang deklarasyon ng mga uri hanggang sa runtime. Upang maiwasan ang pagsusulat ng hiwalay na paraan para sa bawat uri, ginagamit ang parametric polymorphism, kung saan ang uri ng mga parameter ay magiging kapareho ng parameter ng mga operand.

Mga uri ng parametric

Sa halip na magsulat ng klase para sa bawat partikular na uri, dapat tayong lumikha ng mga uri na ipapatupad sa panahon ng pagpapatupad ng programa, iyon ay, lumikha tayo ng parametric na uri.

I-override ang polymorphism

Ang mga abstract na pamamaraan ay madalas na tinutukoy bilang mga ipinagpaliban na pamamaraan. Ang klase kung saan tinukoy ang pamamaraang ito ay maaaring tumawag sa pamamaraan, at tinitiyak ng polymorphism na ang naaangkop na bersyon ng ipinagpaliban na pamamaraan ay tinatawag sa mga klase ng bata. Ang ad hoc polymorphism ay nagbibigay-daan sa isang espesyal na pagpapatupad para sa bawat uri ng data.

Polymorphism-overload

Ito ay isang espesyal na kaso ng polymorphism. Sa tulong ng overloading, ang parehong pangalan ay maaaring magtalaga ng iba't ibang mga pamamaraan, at ang mga pamamaraan ay maaaring magkakaiba sa bilang at uri ng mga parameter, iyon ay, hindi sila nakasalalay sa kanilang mga argumento. Ang pamamaraan ay maaaring hindi limitado sa mga partikular na uri ng parameter ng maraming iba't ibang uri.

Paghahambing ng polymorphism sa functional at object-oriented na programming

Ang mga sistema ng klase sa FP at OOP ay naiiba ang pagkakaayos, kaya ang mga paghahambing sa pagitan ng mga ito ay dapat na maingat na lapitan.

Ang polymorphism ay isang medyo nakahiwalay na pag-aari ng isang programming language. Halimbawa, ang mga klase sa C++ ay orihinal na ipinatupad bilang isang preprocessor para sa C. Para sa Haskell, mayroong isang algorithm para sa pagsasalin ng mga programa na gumagamit ng espesyal na polymorphism sa mga programa na may eksklusibong parametric polymorphism.

Sa kabila ng mga konseptong pagkakaiba sa pagitan ng mga sistema ng klase sa FP at OOP, ipinapatupad ang mga ito sa humigit-kumulang sa parehong paraan - gamit ang mga talahanayan ng mga virtual na pamamaraan. Madalas na ginagamit sa Java.

Tingnan din

Mga link

Mga Tala


Wikimedia Foundation. 2010.

Tingnan kung ano ang "Polymorphism (programming)" sa iba pang mga diksyunaryo:

    Ang terminong ito ay may iba pang kahulugan, tingnan ang Polymorphism. Ang polymorphism ng computer virus (Griyego: πολυ many + Greek: μορφή form, appearance) ay isang espesyal na pamamaraan na ginagamit ng mga may-akda ng malisyosong software... ... Wikipedia

    Sa object-oriented programming, ang kakayahan ng isang bagay na pumili ng tamang paraan depende sa uri ng data na natanggap sa mensahe. Sa English: Polymorphism Tingnan din ang: Object-oriented programming Financial Dictionary... ... Diksyunaryo sa pananalapi

    Ang polymorphism (sa mga programming language) ay ang pagpapalitan ng mga bagay na may parehong interface. Sinusuportahan ng isang programming language ang polymorphism kung ang mga klase na may parehong detalye ay maaaring magkaroon ng iba't ibang mga pagpapatupad, halimbawa, ang pagpapatupad ng isang klase... ... Wikipedia

Ang mga klase ay tinukoy hindi sa pamamagitan ng mga hanay ng mga katangian, ngunit sa pamamagitan ng mga semantika. Kaya, halimbawa, ang mga bagay na "matatag" at "kabayo" ay maaaring magkaroon ng parehong mga katangian: presyo at edad. Bukod dito, maaari silang kabilang sa parehong klase, kung isasaalang-alang sila sa gawain bilang isang produkto lamang, o sa iba't ibang klase, kung sa loob ng balangkas ng gawain ay gagamitin sila nang iba, i.e. Iba't ibang aksyon ang gagawin sa kanila.

Ang pagsasama-sama ng mga bagay sa mga klase ay nagpapahintulot sa amin na isaalang-alang ang problema sa isang mas pangkalahatang pagbabalangkas. Ang isang klase ay may pangalan (halimbawa, "kabayo") na tumutukoy sa lahat ng bagay ng klase na iyon. Bilang karagdagan, ang klase ay naglalaman ng mga pangalan ng mga katangian na tinukoy para sa mga bagay. Sa ganitong diwa, ang paglalarawan ng isang klase ay katulad ng paglalarawan ng isang uri ng istruktura o talaan (record), na malawakang ginagamit sa procedural programming; Bukod dito, ang bawat bagay ay may parehong kahulugan bilang isang halimbawa ng istraktura (isang variable o pare-pareho ng kaukulang uri).

Pormal Klase ay isang pattern ng pag-uugali ng mga bagay ng isang tiyak na uri na may tinukoy na mga parameter na tumutukoy sa estado. Ang lahat ng mga pagkakataon ng parehong klase (mga bagay na nagmula sa parehong klase) ay may parehong hanay ng mga katangian at karaniwang pag-uugali, iyon ay, ang mga ito ay tumutugon sa parehong paraan sa parehong mga mensahe.

Alinsunod sa UML( Pinag-isang Wika ng Pagmomodelo - pinag-isa wika ng pagmomodelo), ang klase ay may sumusunod na graphical na representasyon.

Ang klase ay inilalarawan bilang isang parihaba na binubuo ng tatlong bahagi. Ang pangalan ng klase ay inilalagay sa itaas na bahagi, ang mga katangian ng mga bagay ng klase ay nasa gitna, at ang mga aksyon na maaaring isagawa sa mga bagay ng klase na ito (mga pamamaraan) ay nasa ibabang bahagi.

Ang bawat klase ay maaari ding magkaroon ng mga espesyal na pamamaraan na awtomatikong tinatawag kapag ang mga bagay ng klase na iyon ay nilikha at nawasak:

  • tagabuo(constructor) - naisakatuparan kapag lumilikha ng mga bagay;
  • maninira(destructor) - pinaandar kapag nasira ang mga bagay.

Karaniwan, ang constructor at destructor ay may espesyal na syntax, na maaaring iba sa syntax na ginamit sa pagsulat ng mga normal na pamamaraan ng klase.

Encapsulation

Encapsulation(encapsulation) ay itinatago ang pagpapatupad ng isang klase at pinaghihiwalay ang panloob na representasyon nito mula sa panlabas (interface). Kapag gumagamit ng isang object-oriented na diskarte, hindi kaugalian na direktang i-access ang mga katangian ng isang klase mula sa mga pamamaraan ng iba pang mga klase. Upang ma-access ang mga katangian ng isang klase, kaugalian na gumamit ng mga espesyal na pamamaraan ng klase na ito upang makuha at baguhin ang mga katangian nito.

Sa loob ng isang bagay, ang data at mga pamamaraan ay maaaring magkaroon ng iba't ibang antas ng pagiging bukas (o pagiging naa-access). Ang mga antas ng pagiging naa-access na pinagtibay sa wikang Java ay tatalakayin nang detalyado sa Kabanata 6. Nagbibigay-daan sa iyo ang mga ito na mas makontrol ang pag-aari ng encapsulation.

Ang mga pampublikong miyembro ng isang klase ay bumubuo sa panlabas na interface ng isang bagay. Ito ay functionality na available sa iba. Ang lahat ng mga katangian ng isang klase ay karaniwang idineklara na pribado, pati na rin ang mga pantulong na pamamaraan na mga detalye ng pagpapatupad at kung saan ang ibang mga bahagi ng system ay hindi dapat umasa.

Sa pamamagitan ng pagtatago ng pagpapatupad sa likod ng panlabas na interface ng isang klase, maaari mong baguhin ang panloob na lohika ng isang hiwalay na klase nang hindi binabago ang code ng iba pang mga bahagi ng system. Ang ari-arian na ito ay tinatawag na modularity.

Ang pagtiyak na ang mga katangian ng isang klase ay maa-access lamang sa pamamagitan ng mga pamamaraan nito ay nagbibigay din ng ilang mga benepisyo. Una, ginagawa nitong mas madaling kontrolin ang mga tamang halaga ng mga patlang, dahil imposibleng subaybayan ang direktang pag-access sa mga pag-aari, na nangangahulugang maaari silang italaga sa mga maling halaga.

Pangalawa, hindi magiging mahirap na baguhin ang paraan ng pag-imbak ng data. Kung ang impormasyon ay naka-imbak sa hindi memorya na imbakan, tulad ng isang file system o database, kakailanganin mo lamang na baguhin ang ilang mga pamamaraan sa isang klase sa halip na ipatupad ang functionality na ito sa buong system.

Sa wakas, ang code na nakasulat gamit ang prinsipyong ito ay mas madaling i-debug. Upang malaman kung sino at kailan binago ang pag-aari ng bagay na interesado kami, sapat na upang magdagdag ng output ng impormasyon sa pag-debug sa paraan ng bagay kung saan na-access ang ari-arian ng bagay na ito. Kapag gumagamit ng direktang pag-access sa mga katangian ng bagay, ang programmer ay kailangang magdagdag ng output ng impormasyon sa pag-debug sa lahat ng mga seksyon ng code kung saan ginagamit ang object ng interes.

Mana

Mana Ang inheritance ay isang relasyon sa pagitan ng mga klase kung saan ginagamit ng isang klase ang istruktura o pag-uugali ng ibang klase (solong mana) o iba pang mga klase (multiple inheritance). Ang inheritance ay nagpapakilala ng pampubliko/pribadong hierarchy kung saan subclass nagmana mula sa isa o higit pang karaniwan mga superclass. Ang mga subclass ay karaniwang nagpapalawak o nag-o-override sa minanang istraktura at pag-uugali.

Bilang halimbawa, maaari nating isaalang-alang ang isang problema kung saan kinakailangan na ipatupad ang mga klase na "Kotse" at "Truck". Malinaw, ang dalawang klase na ito ay may karaniwang pag-andar. Kaya, pareho silang may 4 na gulong, isang makina, maaaring gumalaw, atbp. Anumang kotse ay may lahat ng mga katangiang ito, hindi alintana kung ito ay isang trak o isang pampasaherong sasakyan, 5- o 12-seater. Makatuwirang ilagay ang mga karaniwang katangian at functionality na ito sa isang hiwalay na klase, halimbawa, "Kotse" at magmana mula rito ng mga klase na "Kotse" at "Truck", upang maiwasan ang pagsusulat ng parehong code nang paulit-ulit sa iba't ibang klase.


Ang ugnayan sa pangkalahatan ay ipinapahiwatig ng isang solidong linya na may tatsulok na arrow sa dulo. Ang arrow ay tumuturo sa isang mas pangkalahatang klase ( klase ng ninuno o superclass), at ang kawalan nito - sa isang mas espesyal na klase ( klase ng bata o subclass).

Ang paggamit ng inheritance ay nakakatulong na bawasan ang dami ng code na ginawa para ilarawan ang mga katulad na entity, at nakakatulong din sa iyong magsulat ng mas mahusay at flexible na code.

Sa halimbawang isinasaalang-alang, ginagamit ang solong mana. Ang isang klase ay maaari ding magmana ng mga katangian at pag-uugali ng ilang mga klase nang sabay-sabay. Ang pinakasikat na halimbawa ng paggamit ng maramihang mana ay ang pagdidisenyo ng isang sistema ng imbentaryo ng produkto sa isang tindahan ng alagang hayop.

Ang lahat ng mga hayop sa tindahan ng alagang hayop ay mga tagapagmana ng klase ng "Animal", pati na rin ang mga tagapagmana ng klase ng "Produkto". Yung. lahat sila ay may edad, nangangailangan ng pagkain at tubig at kasabay nito ay may presyo at maaaring ibenta.

Ang maramihang pamana sa diagram ay inilalarawan nang eksakto sa parehong paraan tulad ng iisang pamana, maliban na ang mga linya ng mana ay nagkokonekta ng isang descendant na klase sa ilang superclass nang sabay-sabay.

Hindi lahat ng object-oriented programming language ay naglalaman ng mga construct ng wika upang ilarawan ang maramihang pamana.

Sa Java, ang multiple inheritance ay may limitadong suporta sa pamamagitan ng mga interface at sasakupin sa Kabanata 8.

Polymorphism

Polymorphism ay isa sa mga pangunahing konsepto sa object-oriented na programming kasama ng mana at encapsulation. Ang salitang "polymorphism" ay nagmula sa Greek at nangangahulugang "may maraming anyo." Upang maunawaan kung ano ang ibig sabihin nito kaugnay sa object-oriented na programming, tingnan natin ang isang halimbawa.

Ipagpalagay na gusto naming lumikha ng isang vector graphics editor kung saan kailangan naming ilarawan ang isang hanay ng mga graphic primitive sa anyo ng mga klase - Point, Line, Circle, Box, atbp. Para sa bawat isa sa mga klase ay tutukuyin namin ang isang paraan ng pagguhit upang ipakita ang kaukulang primitive sa screen.

Malinaw, kailangan mong magsulat ng code na, kung kinakailangan, upang magpakita ng isang guhit, ay magkakasunod na umuulit sa lahat ng mga primitive na nasa screen sa oras ng pagguhit, at tawagan ang paraan ng pagguhit sa bawat isa sa kanila. Ang isang taong hindi pamilyar sa polymorphism ay malamang na lumikha ng maraming array (isang hiwalay na array para sa bawat primitive na uri) at magsusulat ng code na umuulit sa mga elemento sa bawat array nang sunud-sunod at tumatawag sa paraan ng pagguhit sa bawat elemento. Ang magiging resulta ay humigit-kumulang sa sumusunod na code:

... //paglikha ng isang walang laman na hanay na maaaring // naglalaman ng mga bagay na Punto na may pinakamataas na // kapasidad na 1000 Punto p = bagong Punto; Linya l = bagong Linya; Circle c = bagong Circle; Kahon b = bagong Kahon; ... // ipagpalagay na sa puntong ito // ang lahat ng mga arrays ay puno ng katumbas na // objects... for(int i = 0; i< p.length;i++) { //цикл с перебором всех ячеек массива. //вызов метода draw() в случае, // если ячейка не пустая. if(p[i]!=null) p[i].draw(); } for(int i = 0; i < l.length;i++) { if(l[i]!=null) l[i].draw(); } for(int i = 0; i < c.length;i++) { if(c[i]!=null) c[i].draw(); } for(int i = 0; i < b.length;i++) { if(b[i]!=null) b[i].draw(); } ...

Ang kawalan ng code na nakasulat sa itaas ay ang pagdoble ng halos magkaparehong code upang ipakita ang bawat uri ng primitive. Hindi rin maginhawa na sa karagdagang modernisasyon ng aming graphic editor at pagdaragdag ng kakayahang gumuhit ng mga bagong uri ng mga graphic primitive, halimbawa Text, Star, atbp., gamit ang diskarteng ito kailangan naming baguhin ang umiiral na code at magdagdag ng mga kahulugan ng mga bagong array. dito, pati na rin ang pagproseso na nakapaloob sa mga ito ng mga elemento.

Sa pamamagitan ng paggamit ng polymorphism, maaari naming lubos na pasimplehin ang pagpapatupad ng naturang pag-andar. Una sa lahat, lumikha tayo ng isang karaniwang magulang

Kamusta! Ito ay isang artikulo tungkol sa isa sa mga prinsipyo ng OOP - polymorphism.

Ano ang polymorphism

Nakakatakot ang kahulugan ng polymorphism :)

Polymorphism- ito ang posibilidad ng paggamit ng mga pamamaraan ng parehong pangalan na may pareho o magkakaibang set ng mga parameter sa isang klase o sa isang pangkat ng mga klase na nauugnay sa isang relasyon sa mana.

salita" polymorphism"maaaring mukhang kumplikado - ngunit hindi. Kailangan mo lamang na hatiin ang kahulugan na ito sa mga bahagi at ipakita sa mga halimbawa kung ano ang ibig sabihin. Maniwala ka sa akin, sa dulo ng artikulo ang kahulugan ng polymorphism na ito ay tila malinaw sa iyo :)

Polymorphism, kung isinalin, ibig sabihin nito "maraming anyo" Halimbawa, maaaring subukan ng isang artista sa teatro ang maraming tungkulin - o kumuha ng "maraming anyo."

Ang aming code ay pareho - salamat sa polymorphism, ito ay nagiging mas nababaluktot kaysa sa mga programming language na hindi gumagamit ng mga prinsipyo ng OOP.

Kaya anong mga form ang pinag-uusapan natin? Magbigay muna tayo ng mga halimbawa at ipakita kung paano nagpapakita ang polymorphism sa pagsasanay, at pagkatapos ay bumalik sa kahulugan nito.

Paano ipinakikita ang polymorphism?

Sa katotohanan ay kung ang Java ay walang prinsipyo ng polymorphism, bibigyang-kahulugan ito ng compiler bilang isang error:

Tulad ng nakikita mo, ang mga pamamaraan sa larawan ay naiiba sa mga halagang tinatanggap nila:

  • unang tanggapin int
  • at tinatanggap ng pangalawa String

Gayunpaman, dahil ginagamit ng Java ang prinsipyo ng polymorphism, hindi ito ituturing ng compiler bilang isang error dahil ang mga ganitong pamamaraan ay maituturing na iba:

Ang parehong mga pamamaraan ng pagbibigay ng pangalan ay napaka-maginhawa. Halimbawa, kung mayroon kaming paraan na naghahanap ng square root ng isang numero, mas madaling matandaan ang isang pangalan (halimbawa, sqrt()) kaysa sa isang hiwalay na pangalan para sa parehong pamamaraan, na isinulat para sa bawat uri:

Tulad ng nakikita mo, hindi namin kailangang magkaroon ng isang hiwalay na pangalan para sa bawat pamamaraan - ngunit ang pangunahing bagay ay tandaan ang mga ito! Napakakomportable.

Ngayon ay mauunawaan mo na kung bakit ang prinsipyong ito ay madalas na inilarawan sa parirala:

Isang interface - maraming mga pamamaraan

Ipinapalagay nito na maaari naming punan ang isang pangalan (isang interface) kung saan maaari naming ma-access ang maraming mga pamamaraan.

Overloading ng pamamaraan

Ang ipinakita namin sa itaas - ilang mga pamamaraan na may parehong pangalan at iba't ibang mga parameter - ay tinatawag labis na karga. Ngunit ito ay isang halimbawa ng overloading ng pamamaraan sa isang klase. Ngunit may isa pang kaso - ang mga overriding na pamamaraan ng parent class.

Overriding Magulang Paraan

Kapag nagmana tayo ng klase, minana natin ang lahat ng pamamaraan nito. Ngunit kung gusto nating baguhin ang alinman sa mga pamamaraan na ating namana, maaari nating i-override ito. Hindi kami obligado, halimbawa, na lumikha ng isang hiwalay na pamamaraan na may katulad na pangalan para sa aming mga pangangailangan, at ang minanang pamamaraan ay magiging "patay na timbang" sa aming klase.

Tinatawag na overriding ang katotohanan na maaari tayong lumikha ng klase sa isang descendant na klase na may parehong pangalan sa klase na minana natin mula sa magulang.

Halimbawa

Isipin natin na mayroon tayong ganitong istraktura:

Sa tuktok ng hierarchy ng klase ay ang klase Hayop. Ito ay minana ng tatlong klase - Pusa, aso At baka.

Ang klase na "Animal" ay may "boses" na pamamaraan. Ipinapakita ng paraang ito ang mensaheng "Voice" sa screen. Natural, hindi sinasabi ng aso o ng pusa ang "Voice" :) Tumahol sila at ngiyaw. Alinsunod dito, kailangan mong magtakda ng ibang paraan para sa mga klase Pusa, aso At baka- upang ang pusa ay ngumyaw, ang aso ay tumahol, at ang baka ay nagsabi ng "Moo".

Samakatuwid, sa mga descendant na klase ay pinapalampas namin ang pamamaraan boses(), upang matanggap namin ang "Meow", "Woof" at "Moo" sa console.

  • Pakitandaan: bago ang paraan na aming ino-override, isinusulat namin ang " @I-override". Sinasabi nito sa compiler na gusto naming i-override ang pamamaraan.

Kaya kung ano ang polymorphism

Gayunpaman, ang polymorphism ay isang prinsipyo. Ang lahat ng mga tunay na halimbawa na ibinigay namin sa itaas ay makatarungan mga paraan pagpapatupad ng polymorphism.

Tingnan natin muli ang kahulugan na ibinigay namin sa simula ng artikulo:

Polymorphism- ang kakayahang gumamit ng mga pamamaraan ng parehong pangalan na may pareho o magkakaibang hanay ng mga parameter sa isang klase o sa isang pangkat ng mga klase na nauugnay sa isang relasyon sa mana.

Mukhang mas malinaw, hindi ba? Ipinakita namin kung paano mo magagawa:

  • lumikha ng "mga pamamaraan ng parehong pangalan" sa isang klase ("paraan ng labis na karga")
  • o baguhin ang pag-uugali ng mga pamamaraan ng klase ng magulang ("pag-overriding ng pamamaraan").

Ang lahat ng ito ay mga pagpapakita ng "nadagdagang flexibility" ng mga object-oriented na wika dahil sa polymorphism.

Inaasahan namin na ang aming artikulo ay naging kapaki-pakinabang sa iyo. Maaari kang mag-sign up para sa aming mga kurso sa Javamayroon kaming .



 


Basahin:



Mga kagiliw-giliw na katotohanan tungkol sa mga computer

Mga kagiliw-giliw na katotohanan tungkol sa mga computer

Ang monitor o display ay isang compact na device para sa pagpapakita ng mga larawang nilikha ng video adapter ng isang computer, ibig sabihin, pag-convert...

Post-credits scene ng Pirates of the Caribbean: Dead Men Tell No Tales Ending Dead Men Tell No Tales

Post-credits scene ng Pirates of the Caribbean: Dead Men Tell No Tales Ending Dead Men Tell No Tales

Pagod na sa nawawalang mga premiere sa sinehan dahil sa galit na galit na takbo ng buhay? Pagod na sa mga channel sa TV na nagbo-broadcast ng mga kapaki-pakinabang na pelikula sa hindi komportable...

Tradisyunal na media

Tradisyunal na media

Ibahagi ang balita sa mga social network! Sa panahon ng mataas na teknolohiya, ang pag-iimbak ng data at pag-access dito ay isa sa mga mahalagang kadahilanan ng tao. Para sa simpleng...

Pederal na Batas "Sa Impormasyon Pederal na Batas ng 27

Pederal na Batas

Ang Pederal na Batas na ito ay gumagamit ng mga sumusunod na pangunahing konsepto: 1) impormasyon - impormasyon (mensahe, data), anuman ang kanilang anyo...

feed-image RSS