| 666 | |
| 667 | == RAZREDI IN UVOD V OBJEKTNO PROGRAMIRANJE == |
| 668 | |
| 669 | Razredi so temeljni gradniki v Pythonu. Podobno, kot z besedno zvezo "def" definiramo funkcijo, z besedno zvezo "class" definiramo razred. [[BR]] |
| 670 | Torej kaj sploh je razred ? Razred je, preprosto povedano, logično združevanje podatkov, ter funkcij (slednje, ko so definirane v razredih, pogosto imenujemo tudi "metode"). V takem primeru z "logičnim združevanjem" mislimo predvsem na to, da v praksi, ko delamo z razredi, poskušamo v razrede združevati le tiste podatke in le tiste funkcije, kjer obstaja neka logična povezava med njimi (recimo, imamo razred Strojni_element, v katerem združujemo podatke o materialu, geometriji..., ter razne funkcije, recimo za preračun trdnosti itd. V ta isti razred pa ne bi vnesli podatkov o našem počutju, vremenu, ipd.). Teoretično namreč, v razrede lahko vnašamo bilo katere funkcije in kakršne koli podatke, vendar potem vse skupaj ne bi več imelo nekega smisla. Z razredi si poskušamo programiranje olajšati in ne otežiti. Poleg tega, velikokrat razredi temeljijo na objektih iz realnega sveta (recimo "Kupec", "Produkt", "Avto" ...). [[BR]] |
| 671 | |
| 672 | Kljub vsemu povedanem so razredi tehnika modeliranja oz. način, kako mislimo o programih. Torej, ko programiramo na tak način, to je z razredi in objekti, rečemo, da izvajamo "objektno orientirano programiranje". |
| 673 | |
| 674 | === First-class Everything === |
| 675 | |
| 676 | Guido van Rossum (človek, ki je zasnoval Python) je Python udejanil po načelu "fist-class everyting", kar v bistvu pomeni da vse objekte, katere je v jeziku mogoče poimenovati imeli enak status (npr. integerji, nizi, slovarji, razredi...). Torej, to pomeni, da se vse v Pythonu obravnava enako, torej, vse je razred. |
| 677 | |
| 678 | {{{ |
| 679 | #!python |
| 680 | # -*- coding: utf-8 -*- |
| 681 | |
| 682 | x = 5 |
| 683 | print(type(x)) |
| 684 | |
| 685 | y = 5.45 |
| 686 | print(type(y)) |
| 687 | |
| 688 | def f(x): |
| 689 | return x+1 |
| 690 | print(type(f)) |
| 691 | |
| 692 | import math |
| 693 | print(type(math)) |
| 694 | }}} |
| 695 | |
| 696 | Iz primera ugotovimo, da so tako funkcije, kot tudi tipi spremenljivk v bistvu zapisani v razredu oz. so del nekega razreda. |
| 697 | |
| 698 | === Razredi so "načrti" za izdelavo objektov iz razreda === |
| 699 | |
| 700 | Objekt združuje spremenljivke in funkcije v eno. Objekti dobijo svoje spremenljivke in funkcije iz razredov. Torej iz tega sledi, da so razredi v bistvu neke predloge oz. načrti za izgradnjo naših objektov, medtem, ko objekte, si lahko zamišljamo kot podatkovno strukturo, ki vsebuje tako podatke, kot tudi funkcije. |
| 701 | |
| 702 | {{{ |
| 703 | #!python |
| 704 | # -*- coding: utf-8 -*- |
| 705 | |
| 706 | class Moj_Razred: |
| 707 | x = 5 |
| 708 | |
| 709 | def foo(self): # Parameter "self" bomo obrazložili kasneje |
| 710 | print("Pozdrav iz funkcije foo") |
| 711 | |
| 712 | moj_objekt = Moj_Razred() # Spremenljivka "moj_objekt" vsebuje/drži objekt razreda "Moj_Razred, katere vsebuje spremenljivke, ter "foo" funkcijo |
| 713 | }}} |