Tech Geek
12 iunie 2018
·
6
min citit
Compozitia contractului:
Soliditatea sustine compozitia contractului. Compozitia se refera la combinarea mai multor contracte sau tipuri de date impreuna pentru a crea structuri si contracte de date complexe.
Este o practica buna sa impartiti problemele in solutii multi-contract si sa le compuneti impreuna utilizand compozitia contractului.
Mostenire:
Mostenirea este unul dintre pilonii orientarii obiectului si Solidity sustine mostenirea intre contractele inteligente. Mostenirea este procesul de definire a mai multor contracte care sunt legate intre ele prin relatii parinte-copil.
Contractul care este mostenit se numeste contract parinte, iar contractul care mosteneste se numeste contract copil .
Array
In mod similar, contractul are un parinte cunoscut sub numele de clasa derivata, iar contractul mama este cunoscut sub numele de contract de baza .
Mostenirea este in mare parte legata de reutilizarea codului. Exista o relatie intre contracte de baza si contracte derivate, iar toate
functiile si variabilele de stare publice si interne ale domeniului sunt disponibile contractelor derivate.
De fapt, compilatorul Solidity copiaza codul de baza al contractului de baza in codul de cod derivat al contractului. Cuvantul cheie este utilizat pentru a mosteni contractul de baza in contractul derivat.
Array
Este unul dintre cele mai importante concepte care ar trebui sa fie stapanite de fiecare dezvoltator Solidity datorita modului in care contractele sunt versionate si implementate.
Soliditatea accepta mai multe tipuri de mostenire, inclusiv mostenirea multipla. Solidity copiaza contractele de baza in contractul derivat si se creeaza un singur contract cu mostenirea. Se genereaza o singura adresa care este partajata intre contracte intr-o relatie parinte-copil.
Mostenire unica:
Mostenirea unica ajuta la mostenirea variabilelor, functiilor, modificatorilor si evenimentelor contractelor de baza in clasa derivata.
Array
Mostenire unica
Mostenirea pe mai multe niveluri:
Mostenirea pe mai multe niveluri este foarte asemanatoare cu mostenirea unica; cu toate acestea, in loc de o singura
relatie parinte-copil, exista mai multe niveluri ale relatiei parinte-copil.
Mostenirea pe mai multe niveluri
Acest lucru este prezentat in urmatoarea diagrama. Contractul A este parintele contractului B, iar contractul B este parintele contractului C:
Mostenirea ierarhica:
Mostenirea ierarhica este din nou similara cu mostenirea simpla. Totusi, aici, un singur contract actioneaza ca un contract de baza pentru mai multe contracte derivate.
Mostenirea ierarhica
Acest lucru este prezentat in urmatoarea diagrama.
- video porno viol beezen.biz
- cap d agde porno www.sandiegoimaging.net
- porno francais hd www.graciousgoodness.com
- young porno www.bar-b-cueparts.com
- porno tub eco-fin.com
- actrice porno russe ubscooter.com
- porno senegal mmdholdings.com
- porno comique esitesetup.net
- porno italien vintage www.customelectronicsupply.com
- film porno japonais iowa-lottery.net
- afida turner porno warpentertainment.com
- absolut porno dixonheating.com
- scan porno miomio.net
- porno couple senjal.com
- lupo porno www.holidayhomes-europe.com
- porno mama 88point8.com
- porno?trackid=sp-006 www.johnhowland.com
- porno thai www.mercuryav.com
- film porno chinois broadhollow.com
- homme porno japan-kiss.com
- wwe porno www.dareen.com
- tante porno dermpathology.com
Aici, Contractul A este derivat atat in Contractul B, cat si in Contractul C:
Mostenirea multipla:
Soliditatea suporta mostenirea multipla. Pot exista mai multe niveluri de mostenire unica.
Cu toate acestea, pot exista si contracte multiple care deriva din acelasi contract de baza.
Aceste contracte derivate pot fi utilizate ca contracte de baza impreuna in alte clase secundare.
Cand contractele mostenesc de la astfel de copii contracteaza impreuna, exista mostenire multipla, asa cum se arata in urmatoarea diagrama:
Mostenirea multipla:
Nota: Soliditatea urmeaza calea Python si foloseste liniarizarea C3 , cunoscuta si sub numele de Method Resolution Order (MRO) , pentru a forta o ordine specifica in graficele contractelor de baza. Contractele trebuie sa urmeze o ordine specifica in timp ce mostenesc, incepand de la contractul de baza pana la cel mai derivat contract.
Incapsulare:
Incapsularea este unul dintre cei mai importanti piloni ai POO. Incapsularea se refera la procesul de ascundere sau de a permite accesul direct la variabilele de stare pentru schimbarea starii lor.
Se refera la modelul de declarare a variabilelor care nu pot fi accesate direct de catre clienti si pot fi modificate numai folosind functii. Acest lucru ajuta la restrictionarea accesului la variabile, dar, in acelasi timp, permite accesul suficient la clasa pentru a lua masuri in legatura cu aceasta.
Soliditatea ofera modificatori de vizibilitate multipli, cum ar fi externi , publici , interni si privati, care afecteaza vizibilitatea variabilelor de stat din contractul in care sunt definite, mostenind contracte secundare sau contracte externe.
Polimorfism:
Polimorfismul inseamna a avea forme multiple. Exista urmatoarele doua tipuri de polimorfism:
1. Polimorfismul functional
2. Polimorfismul contractual
Functia polimorfism:
Polimorfismul functional se refera la declararea mai multor functii in cadrul aceluiasi contract sau mostenirea contractelor cu acelasi nume.
Functiile difera in functie de tipurile de date ale parametrilor sau de numarul de parametri. Tipurile de returnare nu sunt luate in considerare pentru determinarea semnaturilor de functii valide pentru polimorfism. Acest lucru este, de asemenea, cunoscut sub numele de supraincarcare a metodelor .
soliditate pragmatica ^ 0.4.19; contract helloFunctionPloymorphism {
functie getVariableData (date int8) returnari publice pure (iesire int8) {
return date;
}
functie getVariableData (date int16) returnari pure publice (iesire int16) {
return date;
}
}
Polimorfism contractual:
Polimorfismul contractului se refera la utilizarea mai multor instante contractuale interschimbabile atunci cand contractele sunt legate intre ele prin mostenire. Polimorfismul contractului ajuta la invocarea functiilor contractuale derivate folosind o instanta contractuala de baza.
soliditatea pragmei ^ 0.4.19; contract ParentContract {
uint internal simpleInteger; function SetInteger (uint _value) public {
simpleInteger = _value;
} functia GetInteger () public view returneaza (uint) {
return 10;
}
} contract ChildContract este ParentContract {
functia GetInteger () public view returneaza (uint) {
return simpleInteger;
}
}
Contracte abstracte:
Contractele de rezumate sunt contracte care au definitii partiale ale functiei. Nu puteti crea o instanta a unui contract abstract.
Un contract abstract trebuie mostenit de un contract secundar pentru utilizarea functiilor sale.
Contractele abstracte ajuta la definirea structurii unui contract si orice clasa care mosteneste din acesta trebuie sa asigure furnizarea unei implementari pentru acestea.
Daca contractul copil nu ofera implementarea pentru functii incomplete, nici instanta sa nu poate fi creata.
Semnaturile functiei se termina folosind punctul si virgula,; , caracter.
Nu exista un cuvant cheie furnizat de Soliditate pentru a marca un contract ca abstract.
Un contract devine o clasa abstracta daca are functii fara implementare.
soliditatea pragmei ^ 0.4.19; contract abstractHelloWorld {
functia GetValue () returneaza vizualizarea publica (uint);
function SetValue (uint _value) public; function AddNumber (uint _value) returneaza public (uint) {
return 10;
}
} contract HelloWorld este abstractHelloWorld {
uint private simpleInteger; functia GetValue () public view returneaza (uint) {
return simpleInteger;
}
function SetValue (uint _value) public {
simpleInteger = _value;
}
functia AddNumber (uint _value) returneaza publicul (uint) {
return simpleInteger = _value;
}
}
Interfete:
Interfetele sunt ca niste contracte abstracte, dar exista diferente. Interfetele nu pot contine nicio definitie.
Ele pot contine doar declaratii de functii. Inseamna ca functiile din interfete nu pot contine niciun cod.
Ele sunt, de asemenea, cunoscute sub numele de contracte abstracte pure. O interfata poate contine doar semnatura functiilor.
soliditatea pragmei ^ 0.4.19; contract abstractHelloWorld {
functia GetValue () returneaza vizualizarea publica (uint);
function SetValue (uint _value) public; function AddNumber (uint _value) returneaza public (uint) {
return 10;
}
} contract HelloWorld este abstractHelloWorld {
uint private simpleInteger; functia GetValue () public view returneaza (uint) {
return simpleInteger;
}
function SetValue (uint _value) public {
simpleInteger = _value;
}
functia AddNumber (uint _value) returneaza publicul (uint) {
return simpleInteger = _value;
}
}
Rezumat :
In acest articol m-am concentrat in primul rand pe contracte inteligente, diferitele moduri de a crea o instanta si toate conceptele importante orientate pe obiecte legate de acestea, inclusiv mostenirea, polimorfismul, abstractizarea si incapsularea.
In Solidity pot fi implementate mai multe tipuri de mostenire.
Au fost discutate mosteniri simple, multiple, ierarhice si pe mai multe niveluri, impreuna cu utilizarea si implementarea contractelor si interfetelor abstracte. Trebuie remarcat faptul ca, folosind mostenirea in Solidity, exista in cele din urma un singur contract care este desfasurat in loc de contracte multiple. Exista o singura adresa care poate fi utilizata de orice contract cu o ierarhie parinte-copil.








