Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Etterhvert som programmer vokser i størrelse, så er det naturlig å fordele koden på flere filer. Python kaller slike filer for moduler, og ved å bruke import-setninger kan én modul referere til og aktivere andre moduler. Java har en lignende mekanisme og også en import-setning, men forskjellene er viktige.

Python-moduler

Forskjellen har primært med hva det vil si å aktivere en modul. Ved bruk av import i Python, vil modulen det refereres til bli utført, med mindre den allerede er det. I vårt tilfelle er det rpncalc4ui som importerer rpncalc4core med setningen

...

Resultatet er uansett at navnene i den importerte modulen er tilgjengelig, altså at notatarket tilsvarende modulen er opprettet. Det kan bare være ett slikt ark pr. modul, og det er derfor import-setningen bare kjører modulen hvis den ikke allerede er blitt utført. Når en siden ønsker å referere til funksjoner inni modulen, så bruker en metodenavnet og punktum som prefix foran funksjonsnavnet, f.eks.

Code Block
languagepython
if rpncalc4core.isOperand(token): 
	...

Java-klasser

Java sine moduler kalles klasser, og er lik moduler på den måten at de deklarerer variabler og funksjoner (kalles metoder i Java), og kjører metodene i kontekst av et notatark med variablene i. En viktig forskjell er imidlertid at en kan ha mange slik notatark med de samme variablene i (men selvsagt forskjellige verdier) og at alle disse må opprettes manuelt. Som regel vil en lagre referanser til disse, slik at en kan referere til dem siden, og f.eks. kalle metodene, omtrent på samme måte som en i Python kaller funksjoner i moduler.

Når UI-moduleI vårt tilfelle vil ui-klasse rpncalc5ui-modulen over bruker rpncalc4core-navnet direkte, så må en i Java istedet lage en instans av klassen og lagre denne i en variabel, for så å referere vha. denne:

Code Block
RPNCalcCore rpnCalcCore = new RPNCalcCore();
...
if (rpnCalcCore.isOperand(token)) {
	...
}