Huis Persoonlijke financiën Factoring en Inheritance in C ++ - dummies

Factoring en Inheritance in C ++ - dummies

Video: Inheritance (object-oriented programming) 2024

Video: Inheritance (object-oriented programming) 2024
Anonim

Het concept van overerving, en dus factoring, in C ++ staat een klasse toe om de eigenschappen van een basisklasse te erven. Overname heeft een aantal doelen; het belangrijkste voordeel van overerving is het vermogen om de relatie tussen klassen te benadrukken. Dit is de zogenaamde IS_A-relatie - een magnetronoven IS_A-oven enzo.

Factoring is geweldig als je de juiste correlaties maakt. De verhouding tussen magnetron en conventionele oven lijkt bijvoorbeeld natuurlijk. Claim dat magnetron een speciaal soort broodrooster is en dat je op problemen stuit. Toegegeven, ze maken beide dingen warm, ze gebruiken allebei elektriciteit, en ze zijn allebei te vinden in de keuken, maar daar eindigt de overeenkomst - een magnetron kan geen toast maken en een broodrooster kan geen nacho's maken.

Het identificeren van de klassen die inherent zijn aan een probleem en het tekenen van de juiste relaties tussen deze klassen is een proces dat factoring wordt genoemd. (Het woord heeft betrekking op de rekenkunde die je op de basisschool moest doen: de minst voorkomende noemers worden meegerekend, bijvoorbeeld 12 is gelijk aan 2 keer 2 keer 3.)

Hier is hoe je kunt gebruiken overerving om uw programma's te vereenvoudigen met behulp van een voorbeeld van een bankrekening. Stel dat u werd gevraagd om een ​​eenvoudig bankprogramma te schrijven dat het concept van een spaarrekening en een betaalrekening implementeerde.

Object-georiënteerde programmeurs hebben een beknopte manier bedacht om de meest opvallende punten van een klasse in een tekening te beschrijven. De klassen Controleren en Besparingen worden weergegeven in deze afbeelding. (Dit is slechts een van de verschillende manieren om hetzelfde grafisch weer te geven.)

Besparingen controleren en. "> Onafhankelijke klassen

Sparen controleren en . Onthoud het volgende om deze figuur en de andere figuren te lezen:

De grote doos is de klasse, met de klassennaam bovenaan.
  • De namen in vakjes zijn lidfuncties.

  • De namen die niet in vakjes staan, zijn gegevensleden.

  • De namen die zich tot halverwege de vakken uitstrekken zijn openbaar toegankelijke leden; dat wil zeggen, deze leden kunnen worden benaderd door functies die geen deel uitmaken van de klas of een van zijn nakomelingen. Die leden die volledig in de doos zitten, zijn niet toegankelijk van buiten de klas.

  • Een dikke pijl vertegenwoordigt de IS_A-relatie.

  • Een dunne pijl vertegenwoordigt de HAS_A-relatie.

  • Een auto IS_A voertuig

, maar een auto HAS_A Motor . In de eerste afbeelding ziet u dat de klassen

Controleren en Besparingen veel gemeen hebben. Beide klassen hebben bijvoorbeeld een functie voor intrekking () en storting ().Omdat de twee klassen niet identiek zijn, moeten ze echter als afzonderlijke klassen blijven. (In een echte banktoepassing zouden de twee klassen heel wat anders zijn dan in dit voorbeeld.) Toch zou er een manier moeten zijn om deze herhaling te voorkomen. U kunt een van deze klassen van de andere klasse laten erven.

Besparingen heeft meer leden dan Controleren, , zodat u Besparingen kunt erven van Controleren. Dit arrangement wordt getoond in de volgende afbeelding. De

Besparingen -klasse erft alle leden. De klasse wordt aangevuld met de toevoeging van het gegevenslid noWithdrawals en door het opheffen van de functie () . U moet de opname () overschrijven omdat de regels voor het opnemen van geld van een spaarrekening anders zijn dan die voor het opnemen van geld van een betaalrekening. Besparingen

geïmplementeerd als een subklasse van Controleren. "> Besparingen

geïmplementeerd als een subklasse van Controleren. Hoewel verhuur

besparingen erven van Controleren werkt moeizaam, is het niet helemaal bevredigend. Het grootste probleem is dat het, net als het gewicht op mijn rijbewijs, de waarheid verkeerd voorstelt. Deze erfrechtverhouding houdt in dat een spaarrekening een speciaal type betaalrekening is, wat niet het geval is. Dergelijke verkeerde voorstellingen zijn verwarrend voor de programmeur, zowel van vandaag als morgen. Op een dag zal een programmeur die onze programmeertrucs niet kent, moeten lezen en begrijpen wat onze code doet. Misleidende voorstellingen zijn moeilijk te verzoenen en te begrijpen.

Bovendien kunnen dergelijke onjuiste voorstellingen op de weg tot problemen leiden. Stel bijvoorbeeld dat de bank haar beleid met betrekking tot het controleren van rekeningen wijzigt. Stel dat het besluit om servicekosten in rekening te brengen bij het controleren van rekeningen, als het minimumbedrag tijdens de maand onder een bepaalde waarde daalt.

Een verandering zoals deze kan eenvoudig worden afgehandeld met minimale wijzigingen in de klasse

Controleren. U moet een nieuw lid van de gegevens toevoegen aan de klas Controleren om het minimale saldo gedurende de maand bij te houden. Laten we uitgaan naar een ledemaat en het minimale evenwicht noemen. Maar nu heb je een probleem. Omdat besparingen

erft van controleren, besparingen krijgt dit nieuwe gegevenslid ook. Het heeft geen zin voor dit lid omdat het minimum saldo geen invloed heeft op spaarrekeningen, dus het zit er gewoon in. Vergeet niet dat elk betaalrekeningobject dit extra minimumBalance -lid heeft. Eén extra gegevenslid is misschien geen probleem, maar het voegt nog meer verwarring. Veranderingen zoals deze stapelen zich op. Vandaag is het een extra data-lid - morgen is het een gewijzigde ledenfunctie. Uiteindelijk draagt ​​de spaarrekeningklasse veel extra bagage die alleen van toepassing is op het controleren van rekeningen. Nu komt de bank terug en besluit een beleid voor spaarrekeningen te wijzigen. Dit vereist dat u een functie in

Controleren wijzigt.

Wijzigingen zoals deze in de basisklasse worden automatisch doorgevoerd naar de subklasse, tenzij de functie al is onderdrukt in de subklasse Besparingen. Stel dat de bank besluit om broodroosters weg te geven voor elke storting op de betaalrekening. Zonder dat de bank (of programmeurs) ervan op de hoogte zijn, zouden stortingen op betaalrekeningen automatisch resulteren in broodroosterdonaties. Tenzij u heel voorzichtig bent, kunnen wijzigingen in Controleren

onverwacht verschijnen in Besparingen. Hoe kunt u deze problemen voorkomen? Beweren dat Controleren

een speciaal geval is van Besparingen verandert, maar ons probleem niet oplost. Wat je nodig hebt is een derde klas (noem het Account, alleen voor grins) die de dingen belichaamt die veel voorkomen tussen Checking en Savings, zoals hier getoond. en

Besparingen controleren op een gewone account -klasse. "> Basen

en Besparingen controleren op een gewone account -klasse. Hoe lost het samenstellen van een nieuw account de problemen op? Ten eerste is het maken van een nieuwe Account

-klasse een nauwkeuriger beschrijving van de echte wereld (wat dat ook is). Natuurlijk is er echt iets bekend als een account. Spaarrekeningen en betaalrekeningen zijn speciale gevallen van dit meer fundamentele concept. Bovendien is de klasse Besparingen

geïsoleerd van wijzigingen in de klasse Controle (en omgekeerd). Als de bank een fundamentele wijziging in alle accounts instelt, kunt u Account, wijzigen en alle subklassen zullen de wijziging automatisch overnemen. Maar als de bank haar beleid alleen wijzigt voor het controleren van accounts, kunt u alleen de accountklasse Controleren wijzigen zonder Besparingen te beïnvloeden. Dit proces van het verwijderen van gemeenschappelijke eigenschappen uit vergelijkbare klassen is de essentie van klassenfactoren .

Factoring is alleen legitiem als de inheritance-relatie overeenkomt met de realiteit. Het samenvoegen van een klasse muis

en joystick omdat beide hardware-aanwijsapparaten legitiem zijn. Het samenvoegen van een klasse muis en beeldscherm , omdat ze beide op laag niveau oproepen van het besturingssysteem niet doen.

Factoring en Inheritance in C ++ - dummies

Bewerkers keuze

Tien Helpbronnen voor Junos OS - dummies

Tien Helpbronnen voor Junos OS - dummies

Dit is een top-tien lijst met bronnen die u moet zoeken meer informatie over softwarebewerkingen, training en ondersteuning voor Junos - alle extra details die u mogelijk nodig heeft om Junos OS te kunnen configureren en bedienen in uw eigen netwerkimplementaties. CLI Help-commando's Bent u op zoek naar meer achtergrondinformatie over hoe een bepaalde functie ...

De functie van de drie vlakken van Junos netwerk OS - dummies

De functie van de drie vlakken van Junos netwerk OS - dummies

De architectuur van de Junos opererende systeem verdeelt de functies van besturing, services en doorsturen op verschillende niveaus. Elk van de vlakken van Junos OS biedt een kritieke set van functionaliteit in de werking van het netwerk. Besturingsvlak van het Junos-netwerkbesturingssysteem (NOS) Alle functies van het besturingsvlak lopen op ...

De basisprincipes van BGP-routebealing - dummy's

De basisprincipes van BGP-routebealing - dummy's

Het configureren van Border Gateway Protocol (BGP) kan nogal lastig zijn, vooral met grote aantallen peersessies die handmatig moeten worden geconfigureerd. In feite kan in een groot netwerk de full-mesh-vereiste voor IBGP een provisioning-nachtmerrie zijn. BGP's antwoord op de IBGP-paring-configuratie-nachtmerrie die het volledige maaswerk is, wordt routeberefening genoemd. Route ...

Bewerkers keuze

Noodzakelijke elementen voor SEO om hoge trefwoorden te krijgen - dummies

Noodzakelijke elementen voor SEO om hoge trefwoorden te krijgen - dummies

Als de allerbeste locatie op het web staat op de pagina een van de zoekmachines, je moet de SEO-elementen kennen die je daar kunnen brengen. Een goede plek om te beginnen is met zoekwoorden. Zoekmachines gebruiken geavanceerde processen om zoekwoordgebruik en andere factoren te categoriseren en analyseren om erachter te komen ...

Persberichten als bron van SEO-inhoud - dummies

Persberichten als bron van SEO-inhoud - dummies

Het leuke aan persberichten is dat u ze zonder toestemming op uw website kunt gebruiken, en sommige zullen al voor de zoekmachine zijn geoptimaliseerd. Het doel van een persbericht is om het uit te sturen en te zien wie het ophaalt. U hoeft geen contact op te nemen met de eigenaar van het persbericht, omdat ...

Kies een domeinnaam die geoptimaliseerd is voor zoekmachines - dummies

Kies een domeinnaam die geoptimaliseerd is voor zoekmachines - dummies

Zelfs de domeinnaam van uw site moet geoptimaliseerd voor zoekmachines. Zoekmachines lezen uniforme resource locators (URL's), op zoek naar sleutelwoorden erin. Bijvoorbeeld als u een website heeft met de domeinnaam knaagdierracen. com en iemand zoekt Google op knaagdierenraces, Google ziet rodent-racing als een wedstrijd; omdat er een streepje verschijnt tussen de twee ...

Bewerkers keuze

Praxis Elementair onderwijs Examen-Economie - dummies

Praxis Elementair onderwijs Examen-Economie - dummies

U zult enkele basisconcepten van de economie voor de Praxis moeten kennen Elementair onderwijs examen. Elementaire economie onderzoekt de wens voor, de productie van en de verkoop en het gebruik van geld, zowel lokaal als wereldwijd. Het onderwijzen van economie omvat concepten zoals behoeften versus behoeften, kosten en meer tot nadenken stemmende onderwerpen, zoals de volgende: ...

Praxis Elementair onderwijs voor Dummy's Cheat Sheet - dummies

Praxis Elementair onderwijs voor Dummy's Cheat Sheet - dummies

Het Praxis basisonderwijs: Curriculum, instructie en beoordeling examen (5017) bestrijkt een breed scala van wat u moet weten over basisonderwijs. Als u het Praxis Elementary Education: Content Knowledge-examen (5018) neemt, moet u zich ervan bewust zijn dat het de dekking beperkt tot de inhoud van de vier hoofdonderwerpen die een elementaire leraar is ...

Praxis Core For Dummies Cheat Sheet - dummies

Praxis Core For Dummies Cheat Sheet - dummies

Voordat je te opgewonden raakt, begrijp dat de informatie die volgt niet klopt eigenlijk niet over het bedriegen van de Praxis. Het gaat echt meer om de meest efficiënte manieren om je voor te bereiden op het examen. Maar "voorbereidingsblad" heeft niet helemaal dezelfde reden. Trouwens, vals spelen is niet nodig als je weet wat je aan het doen bent, en ...