8 min lexim
Moduli 5 nga 7, mësimi 1 nga 5. 0 nga 23 mësime të përfunduara.
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ë plan
Një klasë është plani për një lloj sendi. Ajo nuk ruan asnjë libër të veçantë; përshkruan çfarë do të ketë dhe çfarë mund të bëjë çdo libër. Nga një plan mund të ndërtosh shumë sende të vërteta dhe çdo send i ndërtuar quhet objekt, ose instancë e klasës.
Mendo planin e një shtëpie dhe shtëpitë e ndërtuara sipas tij në një rrugë. Ka një plan, por dhjetë shtëpi, secila me adresën dhe ngjyrën e vet. Plani ë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 plani 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 përdorësh me detyrim. Vlera e tyre shfaqet kur një program ka disa sende që mbajnë gjendje dhe sjellje dhe kur dëshiron të shtosh të tjera më vonë pa rishkruar gjithçka. Bashkimi i të dhënave dhe veprimeve që u përkasin në një plan do të thotë se pjesa tjetër e kodit mund të thotë "krijo një libër" dhe "më jep përmbledhjen e tij" pa pasur nevojë të dijë si e ruan libri numrin e faqeve. Mësimet e ardhshme ndërtojnë mbi këtë: çfarë ndodhet brenda një objekti dhe si mund të trashëgojnë 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 printo 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 planin 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
alphaPlan tregon nëse një mësim vjen nga një program i zhvilluar në klasë apo është shkruar për këtë shteg. 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. Kush bëri çfarë
Gjete diçka të paqartë, të vjetruar ose që mund të përmirësohet? Sugjero një përmirësim