Acasă Finanțe personale Factoring și moștenire în C ++ - manechine

Factoring și moștenire în C ++ - manechine

Video: Building Dynamic Web Apps with Laravel by Eric Ouyang 2024

Video: Building Dynamic Web Apps with Laravel by Eric Ouyang 2024
Anonim

Conceptul de moștenire și deci factoring în C ++ permite unei clase să moștenească proprietățile unei clase de bază. Moștenirea are o serie de scopuri; beneficiul principal al moștenirii este capacitatea de a evidenția relația dintre clase. Aceasta este așa-numita relație IS_A - un cuptor cu microunde Oven IS_A și așa ceva.

Factoringul este un lucru minunat dacă faceți corelațiile corecte. De exemplu, relația cuptor cu microunde față de cuptorul convențional pare naturală. Afirmați că cuptorul cu microunde este un tip special de prăjitor de pâine și că vă îndreptați spre probleme. Adevărat, ambele fac lucruri fierbinți, ambele folosesc energie electrică și ambele găsesc în bucătărie, dar asemănarea se termină acolo - un cuptor cu microunde nu poate face toast și un prăjitor de pâine nu poate face nachos.

Identificarea claselor inerente unei probleme și trasarea relațiilor corecte între aceste clase este un proces cunoscut sub numele de factoring. (Cuvântul este legat de aritmetica pe care ați fost obligată să o faceți în clasa de învățământ: factoring-ul celor mai puțin numitori, de exemplu, 12 este egal cu 2 ori 2 ori 3.)

Iată cum puteți utiliza moștenire pentru a vă simplifica programele folosind un exemplu de cont bancar. Să presupunem că vi sa cerut să scrieți un program bancar simplu care a implementat conceptul de cont de economii și un cont de verificare.

Programatorii orientați spre obiect au venit cu un mod concis pentru a descrie punctele importante ale unei clase într-un desen. Clasele Checking și Savings sunt afișate în această figură. (Aceasta este doar una din mai multe modalități de exprimare grafică a aceluiași lucru.)

Verificarea și Economii. ">

Clase independente Verificarea și Economii.

Pentru a citi această figură și celelalte figuri, rețineți următoarele:

  • Cutia mare este clasa, cu numele clasei din partea de sus.

  • Numele în cutii sunt funcții ale membrilor.

  • Numele care nu sunt în cutii sunt membri de date.

  • Numele care se extind parțial din cutii sunt membri accesibili publicului; adică acești membri pot fi accesați prin funcții care nu fac parte din clasă sau din oricare dintre descendenții acesteia. Membrii care se află complet în cutie nu sunt accesibili din afara clasei.

  • O săgeată groasă reprezintă relația IS_A.

  • O săgeată subțire reprezintă relația HAS_A.

O mașină IS_A Vehicul , dar o mașină HAS_A Motor .

În prima figură puteți vedea că clasele Checking și Savings au multe în comun. De exemplu, ambele clase au funcția de retragere () și depozit ().Deoarece cele două clase nu sunt identice, acestea trebuie să rămână ca clase separate. (Într-o aplicație bancară reală, cele două clase ar fi mult mai diferite decât în ​​acest exemplu). Totuși, ar trebui să existe o modalitate de a evita această repetare.

Ai putea avea una din aceste clase să moștenească de la cealaltă. Economii are mai mulți membri decât Verificați, astfel încât să puteți lăsa Economii să moștenească de la Verificați. Acest aranjament este prezentat în următoarea figură.

Clasa Economii moștenește toți membrii. Clasa este completă cu adăugarea membrului de date noWithdrawals și prin suprimarea retragerii funcției () . Trebuie să ignorați retragerea () deoarece regulile de retragere a banilor dintr-un cont de economii sunt diferite de cele pentru retragerea banilor dintr-un cont de verificare.

Economii implementate ca o subclasă de Verificare. ">

Economii implementate ca o subclasă de Verificare.

Deși permițând Economii să moștenească de la Verificarea este salvarea muncii, nu este complet satisfăcătoare. Principala problemă este că, asemenea greutății enumerate pe permisul de conducere al meu, aceasta reprezintă greșit adevărul. Această relație de moștenire implică faptul că un cont de economii este un tip special de cont de verificare, care nu este.

Astfel de declarații false sunt confuze pentru programator, atât azi, cât și de mâine. Într-o zi, un programator care nu este familiar cu trucurile noastre de programare va trebui să citească și să înțeleagă ce face codul nostru. Înțelegerile înșelătoare sunt dificil de reconciliat și de înțeles.

În plus, astfel de declarații false pot duce la probleme pe drum. Să presupunem, de exemplu, că banca își modifică politicile în ceea ce privește verificarea conturilor. Spuneți că decide să perceapă o taxă de serviciu pentru verificarea conturilor numai dacă soldul minim scade sub valoarea dată în cursul lunii.

O schimbare ca aceasta poate fi ușor de manevrat, cu modificări minime la clasa Verificare. Va trebui să adăugați un nou membru de date la clasa Verificarea pentru a ține evidența soldului minim în timpul lunii. Să ieșim pe un membru și să-l numim minimumBalance.

Dar acum aveți o problemă. Deoarece Economii moștenește de la Verificarea, economiile primesc și acest nou membru de date. Nu are nici un folos pentru acest membru, deoarece soldul minim nu afectează conturile de economii, așa că este doar acolo. Rețineți că fiecare obiect de cont de verificare are acest membru suplimentar minimumBalanță . Un membru suplimentar de date nu poate fi o afacere mare, dar adaugă și mai multă confuzie.

Modificări de acest fel se acumulează. Astăzi este un membru de date suplimentar - mâine este o funcție de membru modificată. În cele din urmă, clasa de conturi de economii poartă o mulțime de bagaje suplimentare care se aplică numai conturilor de verificare.

Acum, banca revine și decide să modifice politica contului de economii. Aceasta necesită modificarea unei anumite funcții în Verificare. Modificările de acest gen din clasa de bază se propagă automat în jos până la subclasa, cu excepția cazului în care funcția este deja suprascrisă în subclasa Economii.

De exemplu, să presupunem că banca decide să dea toasterilor pentru fiecare depozit în contul de verificare. Fără a ști banca (sau programatorii săi), depozitele la conturile de verificare ar duce automat la donații de la toaster. Dacă nu sunteți foarte atent, modificările la Verificarea pot apărea în mod neașteptat în Economii.

Cum poți evita aceste probleme? Afirmând că Verificarea este un caz special de Economii modificări, dar nu ne rezolvă problema. Ceea ce aveți nevoie este o clasă a treia (apelați-l Cont, doar pentru a vă înfrunta) care întruchipează lucrurile care sunt comune între Verificați și Economii, .

Verificarea și Economii pe o clasă comună Cont . ">

Basing Verificarea și Economii pe o clasă comună Account .

Cum construiește un cont nou rezolva problemele? În primul rând, crearea unei noi clase Cont reprezintă o descriere mai exactă a lumii reale (oricare ar fi aceasta). Desigur, există într-adevăr ceva cunoscut ca un cont. Conturile de economii și conturile de verificare sunt cazuri speciale ale acestui concept mai fundamental.

În plus, clasa Economii este izolată de modificările aduse clasei Verificarea (și invers). Dacă banca instituie o modificare fundamentală a tuturor conturilor, puteți modifica Contul, și toate subclasele vor moșteni automat modificarea. Dar dacă banca își modifică politica numai pentru verificarea conturilor, puteți modifica doar clasa de cont Verificare fără a afecta Economii.

Acest proces de culegere a proprietăților comune din clase similare este esența factoringului de clasă .

Factoringul este legitim numai dacă relația de moștenire corespunde realității. Factoring împreună o clasă Mouse și Joystick , deoarece ambele dispozitive de indicare hardware este legitimă. Factoring împreună o clasă Mouse și Display , deoarece ambele fac apeluri de nivel scăzut de sistem de operare nu este.

Factoring și moștenire în C ++ - manechine

Alegerea editorilor

Cum să faci aritmetică de bază în R-dummies

Cum să faci aritmetică de bază în R-dummies

De operatori aritmetici, astfel încât să puteți utiliza R ca un calculator fantezie dacă apare necesitatea. Cum se utilizează operatorii de bază în R Majoritatea operatorilor aritmetici de bază sunt foarte familiarizați cu programatorii (și cu oricine altcineva care a studiat matematica în școală). Descrierea operatorului ...

Cum se extrage un subset al unui vector în R - dummies

Cum se extrage un subset al unui vector în R - dummies

Utilizați aceleași reguli de indexare pentru vectorii de caractere pe care îl utilizați pentru vectorii numerici (sau pentru vectori de orice tip). Procesul de trimitere la un subset al unui vector prin indexarea elementelor sale se numește și subsetare. Cu alte cuvinte, subsetarea este procesul de extragere a unui subset al unui vector. Pentru a ilustra ...

Cum se face matricea aritmetică în R-dummies

Cum se face matricea aritmetică în R-dummies

ÎN afară de operatorii aritmetici clasici, R conține un set mare de operatori și funcții pentru a efectua un set larg de operații matrice. Multe dintre aceste operațiuni sunt folosite în matematică avansată, astfel încât este posibil să nu aveți nevoie de ele. Unele dintre ele pot veni destul de la îndemână, deși, dacă aveți nevoie să răsturnați datele sau ...

Alegerea editorilor

Top 10 Dificultăți în practica de înțelegere și cum să le depășești - manechine

Top 10 Dificultăți în practica de înțelegere și cum să le depășești - manechine

De practici, mindfulness nevoie de timp pentru a învăța, a înțelege și a încorpora într-o rutină zilnică. Ca și în orice altceva, va avea parte de dificultăți, dar toate pot fi depășite. Găsirea timpului pentru o practică formală de conștientizare Unul dintre cele mai dificile lucruri despre practica de conștientizare este găsirea timpului ...

Depășirea distanței de comunicare cu copiii dvs. autism

Depășirea distanței de comunicare cu copiii dvs. autism

Deficitele de limbă și de comunicare sunt de obicei cele mai grave și aspecte stresante ale autismului. Comunicarea cu succes este o provocare majoră cu care se confruntă multe persoane cu autism. Capacitatea lor de a comunica dramatic afectează cât de bine interacționează social într-o lume non-autistă. Mulți oameni cu autism nu au capacitatea de a cere chiar și un pahar de apă sau ...

Benzodiazepinele și tratamentul tulburărilor bipolare - manechine

Benzodiazepinele și tratamentul tulburărilor bipolare - manechine

Cele mai frecvent utilizate medicamente pur antianchetă utilizate în tratamentul tulburarea bipolară sunt benzodiazepinele (cunoscute și sub numele de anxiolitice sau tranchilizante sau benzos pe scurt). Aceste medicamente încetinesc întregul sistem nervos, reducând astfel agitația și nivelurile de anxietate, ambele putând fi probleme în tulburarea bipolară. Benzoazele par să afecteze un creier ...

Alegerea editorilor

Navigați în Adobe Acrobat Creative Suite 5

Navigați în Adobe Acrobat Creative Suite 5

Acrobat CS5 oferă o varietate de panouri care sunt utile atunci când navigați prin documente PDF. Panourile de navigare sunt afișate în partea stângă a ferestrei Document ca mici pictograme. Faceți clic pe o pictogramă pentru a face panoul său vizibil. De exemplu, dați clic pe pictograma Pagini pentru a afișa reprezentările de dimensiuni miniatură pentru fiecare pagină. În paginile ...

Restricționa Cine poate edita sau imprima documente PDF - dummies

Restricționa Cine poate edita sau imprima documente PDF - dummies

Adobe Acrobat Creative Suite 5 cu capacitatea de a restricționa cine poate edita sau imprima documentele PDF pe care le distribuiți. Urmați acești pași:

Ecran Prindeți o secțiune a unui fișier PDF - dummies

Ecran Prindeți o secțiune a unui fișier PDF - dummies

Puteți utiliza instrumentul Snapshot în Adobe Acrobat CS5 pentru a selecta textul și imaginile și a crea o imagine a unei anumite zone dintr-un fișier PDF. Rezultatul este denumit în mod obișnuit ca o apucare pe ecran a unei secțiuni dintr-un fișier PDF. Rezultatul este o imagine și textul dvs. nu este ...