„Klasi (forritun)“: Munur á milli breytinga

Efni eytt Efni bætt við
Navaro (spjall | framlög)
m Tók aftur breytingar BiT (spjall), breytt til síðustu útgáfu VolkovBot
Navaro (spjall | framlög)
m Tók aftur breytingar Navaro (spjall), breytt til síðustu útgáfu BiT
Lína 1:
'''Klasi'''<ref name="tos">[http://tos.sky.is/tos/to/word/isl/2941/ '''klasi''' ''kk.'']</ref> er eining í [[Hlutbundin forritun|hlutbundinni]] [[forritun]] sem gegnir hlutverki sniðmáts.<ref name="tos"/> Klasi ákveðins [[Hlutur (tölvunarfræði)|hlutar]] lýsir eiginleikum og aðgerðum [[Tilvik (tölvunarfræði)|tilviks]] hans.<ref name="tos"/> Taka má sem dæmi klasann <tt>Bíll</tt> sem hefði að geyma upplýsingar um lit og gerð bílsins sem og fjölda hurða og dekkja. Þegar klasinn er í hendi er má búa til mörg tilvik af honum með mismunandi eiginleika, tilvik af grænum bíl með 4 hurðir og 15 dekk eða rautt tilvik 2 hurðir og 4.
'''Klasi''' er eining í [[forritun]] sem er forrituð með eitthvað skilgreint markmið eða hlutverk. Klasar eru notaðir til þess að skipta [[forrit]]i niður í einingar og eru eitt megineinkenni [[hlutbundin forritun|hlutbundinnar forritunar]].
 
== Ástæður ==
Klasar brjóta niður forritin þannig að það sé auðveldara að vinna með þau. Ákveðnir hlutir um ákveðið efni eru alltaf á sínum stað og við vitum hvar leita þarf að þeim.
Klasar brjóta [[forrit]] niður svo auðveldara sé að vinna með þau. Meginreglan er að skipta forritinu niður í einingar sem eru hannaðar á þann veg að breyting í einum klasa hafi sem minnst áhrif á aðra hluti forritsins til þess að auðvelda okkur smíði stórra kerfa. Hentugast er að reyna að gera almenna klasa sem hægt er að endurnýta þegar sömu virkni vantar í önnur verkefni. Til þess að ekki þurfi að skrifa klasa sem er þegar til, og einnig til að nýta klasa sem búið er að prófa út í gegn og vitað að virkar mjög vel.
 
=== Klasaskil ===
Ef við tökum bíl sem dæmi, þá gerum við klasa sem skilgreinir eigindi bílsins, eins og hurðir, dekk, lit og gerð. Eftir að við gerum klasann þá getum við gert eins mörg mismunandi tilvik af honum og við viljum. Við getum t.d. búið til tilvikið „einn grænn bíll með 4 hurðir, 15“ dekk“ eða „rauður bíll með 5 hurðir og 17“ dekk“.
Klasi getur til dæmis séð um tengingu við [[gagnagrunnur|gagnagrunn]]. Þá nota aðrir klasar hann til að hafa samskipti við gagnagrunninn. Klasar geta haft samskipti sín á milli beint eða í gegnum [[skil]]. Skil eru notuð sem skilgreiningarhluti á klasa til að auðvelda samskipti milli forritunareininga innan forrits.
 
== Dæmi ==
Meginreglan er að skipta forritinu niður í einingar sem eru hannaðar á þann veg að breyting í einum klasa hafi sem minnst áhrif á aðra hluti forritsins til þess að auðvelda okkur smíði stórra kerfa.
 
Dæmi í [[Java (forritunarmál)|Java]]: Klasinn <code>Maður</code> og klasinn <code>KarlMaður</code> sem erfir klasann <code>Maður</code>. Það þýðir að kall í klasann <code>KarlMaður</code> getur nýtt aðferðir sem eru skilgreindar í klasanum <code>Maður</code>:
Hentugast er að reyna að gera almenna klasa sem hægt er að endurnýta þegar sömu virkni vantar í önnur verkefni. Til þess að ekki þurfi að skrifa klasa sem er þegar til, og einnig til að nýta klasa sem búið er að prófa út í gegn og vitað að virkar mjög vel.
 
<source lang="java">
== Klasaskil ==
public class Maður {
Klasi getur til dæmis séð um tengingu við [[gagnagrunnur|gagnagrunn]]. Þá nota aðrir klasar hann til að hafa samskipti við gagnagrunninn. Klasar geta haft samskipti sín á milli beint eða í gegnum [[skil]]. Skil eru notuð sem skilgreiningarhluti á klasa til að auðvelda samskipti milli forritunareininga innan forrits.
public void VeifaHöndum() {
//aðferð til að veifa höndum
}
}
 
public class KarlMaður extends Maður { //extends er skipunin í java sem segir ''erfir''
Dæmi í [[Java (forritunarmál)|Java]]: Klasinn <code>Maður</code> og klasinn <code>KarlMaður</code> sem erfir klasann <code>Maður</code>. Það þýðir að kall í klasann <code>KarlMaður</code> getur nýtt aðferðir sem eru skilgreindar í klasanum <code>Maður</code>:
public void LataVaxaSkegg() {
//Aðferð til að láta skegg vaxa
}
}
 
public static void main(string Args[]) {
<code>
public class Maður {
public void VeifaHöndum(){
//aðferð til að veifa höndum
}
}
public class KarlMaður extends Maður{ //extends er skipunin í java sem segir ''erfir''
public void LataVaxaSkegg() {
//Aðferð til að láta skegg vaxa
}
}
public static void main(string Args[]) {
KarlMaður karlMaður = new KarlMaður();
karlMadur.VeifaHöndum();
karlMaður.LataVaxaSkegg();
}
</codesource>
 
Klasinn sem erfir getur framkvæmt aðgerðir og notað breytur sem eru í erfðum klasa sem eru skilgreindar sem public eða protected en ekki ef skilgreiningin private er notuð. Í dæminu að ofan ef aðgerðin VeifaHöndum() væri skilgreind svona: private void VeifaHöldum() þá hefði klasinn KarlMaður ekki aðgang að aðgerðinni og forritsstubburinn að ofan væri ólöglegur.
 
Á sama hátt er hægt að láta skil erfa skil en skil geta ekki erft klasa og klasi getur ekki erft skil.
 
Dæmi um klasa í [[Python]]:
 
<source lang="python">
class Maður:
"Manneskja með sál og hjarta."
def __init__(sjálf, nafn, aldur):
sjálf.nafn = nafn.capitalize()
sjálf.aldur = aldur
def kynning(sjálf):
print("Komið sæl, ég heiti {0} og er {1} ára.".format(sjálf.nafn, sjálf.aldur))
 
Anna = Maður("anna", 26)
print("Nafn:", Anna.nafn) # Prentar „Aldur: 26“
print("Aldur:", Anna.aldur) # Prentar „Nafn: Anna“
Anna.kynning() # Prentar „Komið sæl, ég heiti Anna og er 26 ára.“
</source>
 
== Private, protected, og public ==
Lína 51 ⟶ 65:
Þegar skilgreindur er '''hlutrænn klasi''' þá vita þeir klasar sem að erfa hann ekki hvernig hann útfærir hlutrænu föllin.
 
Hérna er eitt dæmi í [[C++]], klasi sem við köllum <codett>Hello</codett> er gerður með smið sem tekur inn streng. Þegar við köllum á fallið <codett>Say()</codett> þá mun tilvik af <codett>Hello</codett> prenta <codett>Hello{what}</codett> á skjáinn.
 
<pre>
<source lang="cpp">
using System;
public class Hello
Lína 74 ⟶ 89:
}
}
</presource>
 
== Sjá einnig ==
* [[Erfðir (forritun)|Erfðir]]
* [[Grunnklasasafn]]
* [[Smiður (tölvunarfræði)|Smiður]]
 
== Heimildir ==
* {{wpheimild | tungumál = en | titill = Class (computer_science) | mánuðurskoðað = 13. mars | árskoðað = 2007}}
 
== Tilvísanir ==
<references/>
 
[[Flokkur:Forritun]]