Kalo te përmbajtja
Kalo te mësimi

8 min lexim

Moduli 5 nga 7, mësimi 1 nga 5. 0 nga 23 mësime të përfunduara.

American Corners

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

  1. 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.
  2. Çfarë bën metoda __init__, dhe kur e ekzekuton Python? Pse merr self si parametrin e saj të parë?
  3. Pas i_pari = Liber("A", 10) dhe i_dyti = Liber("B", 20), e ndryshon i_pari.faqe në 11. A ndryshon i_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