8 min lexim
Klasat dhe objektet
Nga një listë hapash te një grup sendesh
Deri tani programet e tua kanë qenë kryesisht lista udhëzimesh: bëj këtë, pastaj atë, pastaj përsërit tjetrën. Kjo ecën mirë derisa një program rritet dhe gjithçka fillon të prekë gjithçka, kështu që një ndryshim në një cep prish në heshtje diçka larg. Programimi i orientuar nga objektet është një mënyrë tjetër për ta organizuar të njëjtën punë. Në vend të një recete të gjatë, ti përshkruan sendet në programin tënd dhe çfarë mund të bëjë secili send, pastaj i lë të ndërveprojnë.
Një "send" këtu mund të jetë një libër, një llogari bankare, një biletë autobusi ose një lojtar në një lojë. Qëllimi i këtij stili është t'i mbash të dhënat dhe sjelljen e çdo sendi të lidhura bashkë në një vend, që pjesa tjetër e programit të mos ketë nevojë të fusë dorën brenda dhe të ngatërrojë punët.
Një klasë është një projekt
Një klasë është projekti për një lloj sendi. Ajo nuk ruan asnjë libër të veçantë; ajo përshkruan çfarë do të ketë çdo libër dhe çfarë mund të bëjë çdo libër. Nga një projekt mund të ndërtosh shumë sende të vërteta, dhe çdo send i ndërtuar quhet objekt, ose një instancë e klasës.
Mendo projektin e një shtëpie kundrejt shtëpive në një rrugë. Ka një projekt, por dhjetë shtëpi, secila me adresën dhe ngjyrën e vet. Projekti është klasa; çdo shtëpi është një objekt.
Ja një klasë e vogël që përshkruan një libër.
class Liber:
def __init__(self, titull, faqe):
self.titull = titull # titulli i vetë këtij objekti
self.faqe = faqe # numri i faqeve i vetë këtij objekti
def permbledhje(self):
return f"'{self.titull}' ka {self.faqe} faqe"
Metoda __init__ ekzekutohet vetvetiu sa herë krijohet një libër i ri. Puna e saj është të vendosë të dhënat fillestare të atij objekti. Fjala self do të thotë gjithmonë "ky objekt i veçantë", ndaj self.titull është titulli që i takon librit të vetëm që po ndërton, jo librave në përgjithësi.
Krijimi i objekteve
Sapo projekti të jetë shkruar, mund të ndërtosh sa libra të duash. Çdo thirrje e Liber(...) prodhon një objekt krejt të ri me të dhënat e veta.
i_pari = Liber("Rruga e Gjatë", 240)
i_dyti = Liber("Mëngjese të Qeta", 96)
print(i_pari.permbledhje()) # 'Rruga e Gjatë' ka 240 faqe
print(i_dyti.permbledhje()) # 'Mëngjese të Qeta' ka 96 faqe
print(i_pari.faqe) # 240
Vër re se i_pari dhe i_dyti janë të pavarur. Dolën nga e njëjta klasë, por ndryshimi i njërit nuk e prek tjetrin, sepse secili mban titull dhe faqe të vetat. Ajo pavarësi është pikërisht ajo që i pengon programet e mëdha të ngatërrohen: çdo objekt kujdeset për të dhënat e veta.
Këshillë
Kur lexon self brenda një klase, zëvendësoje me mendje me "objekti i posaçëm mbi të cilin po ekzekutohet kjo". self.faqe nuk është "të gjitha faqet kudo", është "faqet e librit të vetëm me të cilin po merremi tani". Ai zakon i vetëm e pastron shumicën e ngatërresave të hershme rreth klasave.
Pse t'ia vlejë
Për një program prej pesë rreshtash, klasat janë tepri, dhe s'duhet t'i detyrosh. Vlera e tyre shfaqet kur një program ka disa sende që secili mban gjendje dhe sjellje, dhe kur do të shtosh të tjera më vonë pa rishkruar gjithçka. Lidhja e të dhënave dhe e veprimeve që u takojnë në një projekt do të thotë se pjesa tjetër e kodit mund të thotë "bëj një libër" dhe "më jep përmbledhjen e tij" pa pasur kurrë nevojë të dijë si e ruan një libër numrin e faqeve. Mësimet e ardhshme ndërtojnë mbi këtë: çfarë saktësisht rri brenda një objekti, dhe si mund të huazojnë objektet sjellje nga njëri-tjetri.
Do ta shohësh të shpjeguar? Ja leksioni i regjistruar i Code for Albania për këtë temë.
Provoje tani
Shkruaj një klasë të vogël Qen me një __init__ që ruan emri dhe raca, dhe një metodë pershkruaj() që kthen një fjali duke përdorur të dyja. Ndërto dy qen të ndryshëm dhe shtyp përshkrimin e secilit. Ndrysho emri e njërit qen dhe verifiko se qeni tjetër nuk preket.
Provo veten
- Me fjalët e tua, cili është ndryshimi mes një klase dhe një objekti? Përdor krahasimin me projektin e shtëpisë për ta shpjeguar.
- Çfarë bën metoda
__init__, dhe kur e ekzekuton Python? Pse merrselfsi parametrin e saj të parë? - Pas
i_pari = Liber("A", 10)dhei_dyti = Liber("B", 20), e ndryshoni_pari.faqenë11. A ndryshoni_dyti.faqe? Shpjego çfarë të tregon kjo për mënyrën si i mbajnë objektet të dhënat e veta.
Nga vjen ky mësim
Ndërtuar mbi
- Data Structures and Algorithms
Kurset e alphaPlan ndërtohen mbi programe të zhvilluara në klasë, e nuk shpiken për web-in. Kur një pohim mbështetet mbi një standard të jashtëm ose mbi një rast të raportuar, ai emërtohet më sipër që ta kontrollosh vetë e të mos na besosh në fjalë.
Ky kurs u zhvillua nga alphaPlan Center mbi bazën e programeve të realizuara në partneritet me rrjetin American Corners.
Gjete diçka të paqartë, të vjetruar ose që mund të përmirësohet? Sugjero një përmirësim