Methoden (OOP) | Briljante Wiskunde- en Wetenschapswiki (2023)

Amethodeis het equivalent van een functie inobject georiënteerd programmeren. Een zelfstandig naamwoord is voor een werkwoord wat een variabele is voor een methode: de methoden zijn de acties die bewerkingen op een variabele uitvoeren. Een methode accepteert parameters als argumenten, manipuleert deze en produceert vervolgens een uitvoer wanneer de methode wordt aangeroepen op eenvoorwerp. Methoden zijn vergelijkbaar met functies, maar methoden worden ook geclassificeerd op basis van hun doel in deklasontwerp. In klassen worden variabelen aangeroepenattributen, dus methoden werken vaak op attributen.

Om objectgeoriënteerd programmeren volledig te kunnen waarderen, moet u bekend zijn met de basisprincipes van programmeren. Bekijk dezie ookom enkele voorgestelde pagina's over basisprogrammering te bekijken.

maatC maatB maatD maatA

1 2 3 4 5 6 7 8 9101112131415161718192021
klas Ijsje(voorwerp): zeker __in het__(zelf, smaak, aantal Scoops, kostenPerScoop, overgebleven_ijsje): zelf.smaak = smaak zelf.aantal Scoops = aantal Scoops zelf.kostenPerScoop = kostenPerScoop zelf.overgebleven_ijsje = overgebleven_ijsje zeker lepel(zelf): #schepijs en verkleint het aantal bolletjes dat nog over is zelf.overgebleven_ijsje -= zelf.aantal Scoops opbrengst zelf.overgebleven_ijsje zeker totale prijs(zelf): #vanille-ijs wordt verkocht met de helft korting! als zelf.smaak == "vanille": totale prijs = zelf.aantal Scoops * .5*zelf.kostenPerScoop anders: totale prijs = zelf.aantal Scoops * zelf.kostenPerScoop opbrengst totale prijs

Welke van de volgende methoden kunnen met behulp van Python aan de klasse worden toegevoegd?Ijsjeom de grootte van de bestelling af te drukken op basis van het aantal maatschepjes, waarbij 1 tot 3 maatschepjes klein is, 4 tot 5 medium en meer dan dat groot is.

1234567
zeker maatA(zelf): als zelf.aantal Scoops in bereik(1,3): afdrukken "klein" elif zelf.aantal Scoops in bereik(4,5): afdrukken "medium" anders: afdrukken "groot"
1234567
zeker maatB(zelf): als zelf.aantal Scoops in bereik(1,4): afdrukken "klein" elif zelf.aantal Scoops in bereik(4,6): afdrukken "medium" anders: afdrukken "groot"
1234567
zeker maatC(zelf): als aantal Scoops in bereik(1,4): afdrukken "klein" elif aantal Scoops in bereik(4,6): afdrukken "medium" anders: afdrukken "groot"
1234567
zeker maatD(zelf): als scheppen in bereik(1,4): afdrukken "klein" elif scheppen in bereik(4,6): afdrukken "medium" anders: afdrukken "groot"

(negeer het feit dat deze functies mogelijk terugkerenGeensamen met het afgedrukte formaat)

Inhoud

  • Methoden
  • Interface-methoden
  • Constructeur
  • Implementatiemethoden
  • Zie ook

Methoden

Methoden zijn als functies ofsubroutinesofalgoritmendie binnen de lessen gebruikt worden. Methoden kunnen omvattenvoor lussen,terwijl lussenen alle andere programmeercomponenten. Methoden kunnen attributen manipuleren die aan een object zijn gekoppeld. Er zijn drie hoofdtypen methoden:interface methoden,constructor methoden, Enimplementatiemethoden. De meeste beginnende programmeurs zijn bekend met implementatiemethoden. In Python is voor het toevoegen aan een lijst bijvoorbeeld een methode nodigtoevoegenen past deze toe op een lijstobject.

1234567
mijn lijst = [1,2,3,4]mijn lijst.toevoegen(5)afdrukken mijn lijst#afdrukken [1,2,3,4,5]

Bij het aanroepen van een methode voor een object in Python is het formaatinstantienaam.methode(). Sommige beginners vergeten de haakjes toe te voegen na een methode, dus let daar op. Soms is het nodig om argumenten op te nemen in een methodeaanroep (zoals in de bijlage in het voorbeeld hierboven).

In Python is de eerste parameter voor methodenzelf. Dezelfparameter wordt gebruikt om lidvariabelen te maken. Binnen een klasse initialiseren we alle variabelen die verschillende waarden kunnen hebben, afhankelijk van de specifieke instantie van de klasseself.VariabeleNaam.

Interface-methoden

Interface-methodenzijn de methoden die tot doel hebben een interface te bieden voor een object met de externe omgeving, bijvoorbeeld de methoden van andere objecten, gegevensinvoer van een gebruiker, gegevens van een ander object of iets dat zich niet in datzelfde object bevindt.

Een van de principes van objectgeoriënteerd ontwerpen isinkapseling. Inkapseling is de techniek waarbij een object wordt gebouwd als een capsule die alle gegevens en methoden in zichzelf bevat. Een object dat van alles geïsoleerd is, is echter ronduit nutteloos; het zou deel moeten uitmaken van een groter systeem. Dat is het moment waarop interfacemethoden hun intrede doen: ze bieden de minimaal noodzakelijke interface voor dat object om externe invoer te krijgen en uitvoer te leveren, zodat het inderdaad deel kan uitmaken van een groter systeem, terwijl het op zichzelf ook een kleiner systeem kan zijn.

Het is bijvoorbeeld een zeer goede objectgeoriënteerde praktijk om a te definiërengetteren eensettermethode voor een attribuut, met name om veiligheids- en code-integriteitsredenen. Een getter haalt de variabele uit de gebruikersinvoer, en de setter wijst de variabele toe zoals deze in de hele klas zal worden gebruikt. Getters en setters zijn methoden die interne attributen op een indirecte manier toegang geven tot externe agenten. Laten we eens kijken hoe ze worden geïmplementeerd:

Getter- en setter-interfacemethoden in Python:

1 2 3 4 5 6 7 8 91011121314151617181920
klas Vierkant(voorwerp): zeker __in het__(zelf, zijlengte): zelf.zijlengte = zijlengte # Getter: zeker getZijlengte(zelf): opbrengst zelf.zijlengte # Setter: zeker setZijlengte(zelf,zijlengte): zelf.zijlengte = zijlengtevierkant = Vierkant(10.0)afdrukken vierkant.getZijlengte() # drukt 10.0 af op het schermvierkant.setZijlengte(3.0)afdrukken vierkant.getZijlengte() # drukt 3.0 af op het scherm

Dit codefragment definieert aVierkantklasse die instanties zal hebben met azijlengteattribuut toegankelijk via de getter-methodegetZijlengtedie de waarde van dat attribuut zal opleveren en via de setter-methodesetZijlengtewat een manier zal bieden om de waarde van dat attribuut te veranderen.

Vervolgens een exemplaar van deVierkantklasse wordt gemaakt met een initiële waarde voorzijlengtegelijk aan 10.0 en deze instantie wordt toegewezen aan devierkantvariabel. De waarde van de sideLength-variabele wordt vervolgens op het scherm afgedrukt, vervolgens wordt de waarde van sideLength bijgewerkt en ten slotte wordt de bijgewerkte waarde van dezijlengtevariabele wordt op het scherm afgedrukt.

De__in het__()De Python-methode kan verwarrend zijn voor beginners tot objectgeoriënteerd programmeren. Dit zijn eigenlijk gewoon een ander type methode, genaamd abouwer.

Constructeur

Een constructor wordt gebruikt om een ​​klasse te instantiëren, wat feitelijk een object creëert (onthoud dat een klasse een blauwdruk is voor een object, en een object een instantie van een klasse). Ze worden meestal vernoemd naar de klasse (zoals in Java en C#) of vernoemd naar een trefwoord (zoals in Python en Ruby). De parameters van een constructormethode, indien aanwezig, zijn gewoonlijk de initiële waarden die moeten worden toegewezen aan sommige of alle attributen van dat object. Je hebt een voorbeeld gezien van een constructor die attributen toewijst in het voorbeeld in de vorige sectie. Laten we een voorbeeld bekijken van een constructor die geen parameters gebruikt en in plaats daarvan de objectkenmerken initialiseert naar een aantal standaardwaarden:

Constructeur in Python:

1 2 3 4 5 6 7 8 910111213141516171819
klas Vierkant(voorwerp): # Constructeur: zeker __in het__(zelf): zelf.zijlengte = 5,0 zeker getZijlengte(zelf): opbrengst zelf.zijlengte zeker setZijlengte(zelf,zijlengte): zelf.zijlengte = zijlengtevierkant = Vierkant() # roept de constructormethode aanafdrukken vierkant.getZijlengte() # drukt 5.0 af op het schermvierkant.setZijlengte(3.0)afdrukken vierkant.getZijlengte() # drukt 3.0 af op het scherm

De structuur van het programma is in principe hetzelfde, behalve dat de constructor nu geen parameters gebruikt en de standaardwaarde retourneert wanneer de getter wordt aangeroepen voor een attribuut waarvan de waarde niet individueel is ingesteld.

Merk ook op dat niet alleen de constructorimplementatie aan bepaalde taalspecifieke conventies moet voldoen, maar ook de constructor die aanroept. In Java wordt de constructor aangeroepen door het trefwoord 'new' toe te voegen voordat de constructor wordt aangeroepen met (of zonder) zijn parameters. In Python wordt de constructor aangeroepen door parameters door te geven aan de klasse (dit activeert feitelijk de__in het__methode).

Implementatiemethoden

De implementatiemethode lijkt het meest op een standaard procedurele functie. Zoals de naam al doet vermoeden, is dit een methode die daadwerkelijk functionaliteit in het object implementeert. Dit zijn de typische methoden die een programmeur in zijn code zou schrijven. Dit wordt meestal gedaan door de attributen van het object te manipuleren en enige output te leveren (of een intern attribuut op een specifieke manier te veranderen zonder enige directe output te leveren, enz.). Laten we de implementatie uitvoerenuitvoergebiedfunctionaliteit in uitVierkantvoorwerp:

Implementatiemethoden in Python:

1 2 3 4 5 6 7 8 9101112131415161718192021
klas Vierkant(voorwerp): # Constructeur: zeker __in het__(zelf): zelf.zijlengte = 5,0 zeker getZijlengte(zelf): opbrengst zelf.zijlengte zeker setZijlengte(zelf,zijlengte): zelf.zijlengte = zijlengte # Geïmplementeerde functionaliteit: zeker uitvoergebied(): opbrengst zelf.getZijlengte() * zelf.getZijlengte()vierkant = Vierkant()vierkant.setZijlengte(3.0)afdrukken vierkant.uitvoergebied() # drukt 9.0 af op het scherm

Wat gebeurt hier? De uitvoer van deuitvoergebied()methode geeft de oppervlakte weer van een vierkant met een zijdelengte die gelijk is aan het sideLength-attribuut van dat Vierkant. De basisrichtlijn voor een interne methode voor een object is om binnen de gegevens ervan te opereren om daadwerkelijke functionaliteit te bieden. Elke methode met een meer algemene functionaliteit die niet beperkt is tot een enkele klasse (of klassenhiërarchie) wordt meestal binnen een module gedefinieerd (denk aan een module als een verzameling methoden die zijn ontworpen om functionaliteit te bieden die in veel verschillende klassen kan worden toegepast) .Als het sideLength-attribuut van het Vierkant 4,0 was in plaats van 3,0, zou de uitvoer 16,0 zijn in plaats van 9,0. De methode is ook niet beperkt tot het uitvoeren van een gesloten bewerking op de attributen; we zouden de uitvoer kunnen manipuleren met behulp van zowel de attributen van het object als een willekeurige parameter, zoals:

Nieuwe implementatie van de outputArea-methode in Python:

1234
zeker outputAreaTimesN(zelf, N): opbrengst (zelf.getZijlengte() * zelf.getZijlengte()) * Nafdrukken vierkant.outputAreaTimesN(2) # drukt 18.0 af op het scherm

Laten we zeggen dat we een videogame hebben waarin de speler een draak bestuurt. De draak heeft veel kenmerken: hij kan vuur spuwen, hij kan vliegen, hij heeft een kleur, hij krijgt punten als hij dorpen vernietigt, enz. Wat zijn enkele methoden die hij zou kunnen hebben? Een ander personage in het spel is een ridder. Wat kunnen enkele methoden voor de ridder zijn?

De draak zou eenvliegmethode die ervoor zorgt dat hij vliegt en zijn snelheid en hoe hoog hij vliegt bijwerkt. De draak zou een vuurspuwende methode kunnen hebben die zijn status bijwerkt naar een vechtende, vuurspuwende modus. Er kan een methode zijn die de score bijwerkt wanneer hij punten behaalt. De draak zou een methode kunnen hebben die zijn gezondheid bijwerkt wanneer hij wordt aangevallen of geneest.

De ridder kan methoden hebben die bijwerken hoe snel hij rent, hoeveel punten hij verdient, of zijn gezondheid verandert. Hij zou een methode kunnen hebben waarmee hij zijn wapen of pantser kan veranderen.

Zie ook

  • Object georiënteerd programmeren

  • Klassen

Basisprogrammeerpagina's

  • Subroutines

  • Voor lussen

  • Terwijl lussen

  • Lijstbegrip

Top Articles
Latest Posts
Article information

Author: Merrill Bechtelar CPA

Last Updated: 15/09/2023

Views: 6082

Rating: 5 / 5 (50 voted)

Reviews: 81% of readers found this page helpful

Author information

Name: Merrill Bechtelar CPA

Birthday: 1996-05-19

Address: Apt. 114 873 White Lodge, Libbyfurt, CA 93006

Phone: +5983010455207

Job: Legacy Representative

Hobby: Blacksmithing, Urban exploration, Sudoku, Slacklining, Creative writing, Community, Letterboxing

Introduction: My name is Merrill Bechtelar CPA, I am a clean, agreeable, glorious, magnificent, witty, enchanting, comfortable person who loves writing and wants to share my knowledge and understanding with you.