Przekształcanie modelu programowania obiektowego na kod przy użyciu klas i zmiennych

Ukończone

Chcesz przeprowadzić ocenę programowania obiektowego, tworząc grę w kamień, papier, nożyce. Aby to zrobić, najpierw należy opracować jej model w formacie dostosowanym do programowania obiektowego.

Konieczne będzie zastosowanie pewnych podstawowych koncepcji związanych z programowaniem obiektowym, takich jak klasy, obiekty i stan. W tej lekcji omówiono następujące części:

  • Ważne pojęcia związane z programowaniem obiektowym: Aby zrozumieć podstawowe pojęcia, takie jak klasy, obiekty i stan, należy zrozumieć pewne podstawowe pojęcia. Musisz znać różnice i relacje między nimi.
  • Zmienne w programie OOP: musisz wiedzieć, jak radzić sobie ze zmiennymi i jak dodać je do obiektów.

Co to jest obiekt?

O koncepcji obiektu wspomniano już kilkukrotnie podczas omawiania próby modelowania domen problemów. Obiekt reprezentuje aktora. Innymi słowy, jest to rzecz lub osoba, która wykonuje jakąś akcję w systemie. Wykonując akcję, zmienia stan swój lub innych obiektów.

Wyobraźmy sobie obiekt w świecie rzeczywistym. Jesteś na parkingu; co widzisz? Prawdopodobnie wiele samochodów, w różnych kształtach, rozmiarach i kolorach. Możesz opisać samochód przy użyciu takich właściwości jak marka, model, kolor czy typ nadwozia. Gdy przypiszesz wartości do tych właściwości, szybko stanie się jasne, że mówisz właśnie o czerwonym Ferrari, terenowym Jeepie, żółtym Mustangu itd.

Illustration that shows a car object with the properties type and color.

Wyobraź sobie inną scenę, w której widzisz talię kart w Las Vegas. Patrzysz na dwie różne karty, czyli dwa obiekty. Uświadamiasz sobie, że mają pewne wspólne właściwości, na przykład kolor. Kolorem w przypadku tych obiektów może być trefl, kier, karo lub pik. Wartością może być as, król, dziewiątka itd.

Napiwek

Rozejrzyj się wokół. Wybierz dwa podobne przedmioty, na przykład dwie książki czy dwa krzesła, i zastanów się, jakie właściwości pozwolą najlepiej je opisać i odróżnić od siebie.

Co to jest klasa?

Klasa to typ danych, który służy jako szablon definicji dla określonego rodzaju obiektu.

Wiesz już, że w systemie programowania obiektowego istnieją obiekty mające właściwości. Istnieje pojęcie podobne do obiektu: a mianowicie klasy.

Co to jest klasa? Klasa to projekt obiektu. Jeśli klasa jest projektem samochodu, to obiektem jest rzeczywisty samochód, którym można jeździć. To właśnie klasy zapisujesz w kodzie. Obiekt natomiast otrzymasz, gdy użyjesz środowiska uruchomieniowego do wykonania kodu.

Poniżej przedstawiono tabelę przykładowych klas i ich wynikowych obiektów:

Klasa Obiekt
Projekt samochodu Honda Accord, Jeep Wrangler
Kot Kot Garfield
Opis lodów Lody truskawkowe, czekoladowe lub waniliowe

Sposób tworzenia obiektu na podstawie klasy przypomina sposób budowania samochodu na podstawie projektu. Podczas tworzenia obiektu program prosi system operacyjny o zasoby, a mianowicie pamięć, o możliwość konstruowania obiektu. Natomiast podczas budowy samochodu na podstawie projektu fabryka zamawia zasoby potrzebne do zmontowania samochodu, takie jak elementy metalowe, gumowe i szklane.

Illustration showing the resource inputs required to assemble a car from a blueprint.

Tworzenie klasy

Aby utworzyć klasę w języku Python, należy użyć słowa kluczowego class i nadać jej nazwę, jak w tym przykładzie:

class Car:

Tworzenie obiektu na podstawie klasy

Tworzenie obiektu na podstawie klasy nazywa się tworzeniem wystąpienia. To, co robisz, pytasz system operacyjny przy użyciu tego szablonu (klasy) i tych wartości początkowych, aby zapewnić wystarczającą ilość pamięci i utworzyć obiekt. Tworzenie wystąpienia oznacza po prostu utworzenie obiektu.

Aby utworzyć wystąpienie obiektu, należy dodać nawiasy do nazwy klasy. Otrzymasz obiekt, który możesz przypisać do zmiennej w następujący sposób:

car = Car()

Zmienna car (samochód) zawiera wystąpienie Twojego obiektu. Momentem utworzenia wystąpienia, czyli utworzenia obiektu, jest moment wywołania klasy Car().

Zmienne w programowaniu obiektowym i proceduralnym

Programowanie proceduralne przyzwyczaiło nas do stosowania zmiennych w celu przechowywania informacji i śledzenia stanów. Takie zmienne można definiować w dowolnym miejscu, w którym są potrzebne w pliku. Typowy sposób inicjowania zmiennej może wyglądać następująco:

pi = 3.14

W programowaniu obiektowym również wykorzystywane są zmienne, ale nie są one definiowane niezależnie, a dołączone do obiektów. Zmienne w obiekcie nazywa się atrybutami. Po dołączeniu atrybutu do obiektu można go używać na dwa sposoby:

  • Opisz obiekt: Przykładem zmiennej opisu jest na przykład kolor samochodu lub liczba plam na żyrafie.
  • Przytrzymaj stan: zmienna może zamiast tego służyć do opisywania stanu obiektu. Przykładem stanu jest piętro, na którym znajduje się kabina windy, bądź jazda lub zatrzymanie windy.

Dodawanie atrybutów do klas

Wiedza o tym, jakie atrybuty (zmienne) należy dodać do klasy, jest częścią modelowania. Wiesz już, jak utworzyć klasę w kodzie — a jak dodać do niej atrybut? Musisz określić, jakie atrybuty ma mieć klasa, w czasie budowy, czyli w momencie tworzenia wystąpienia obiektu. W momencie tworzenia wywoływana jest specjalna funkcja o nazwie .

Konstruktor

Koncepcja konstruktora — specjalnej funkcji wywoływanej tylko podczas pierwszego utworzenia obiektu — jest obecna w wielu językach programowania. Konstruktor jest wywoływany tylko raz. W tej metodzie tworzysz atrybuty, które ma mieć obiekt. Ponadto przypisujesz do utworzonych atrybutów wymagane wartości początkowe.

W języku Python konstruktor ma nazwę __init__(). Należy również przekazać specjalny parametr , selfdo konstruktora. Parametr self odwołuje się do wystąpienia obiektu. Każde przypisanie do tego słowa kluczowego oznacza, że ten atrybut należy do wystąpienia obiektu. Jeśli nie dodasz żadnego atrybutu do słowa kluczowego self, będzie ono zamiast tego traktowane jako tymczasowa zmienna, która przestanie istnieć po zakończeniu wykonywania funkcji __init__().

Uwaga

Parametr self należy również przekazać do wszystkich metod, które muszą odwoływać się do wszystkich elementów w wystąpieniu obiektu. Tę koncepcję omówimy podczas kolejnej lekcji.

Dodawanie i Inicjowanie atrybutów klasy

Zapoznajmy się z przykładem konfigurowania atrybutów w konstruktorze:

class Elevator:
    def __init__(self, starting_floor):
        self.make = "The elevator company"
        self.floor = starting_floor

# To create the object

elevator = Elevator(1)
print(elevator.make) # "The Elevator company"
print(elevator.floor) # 1

W powyższym przykładzie opisano klasęElevator (Winda) z dwiema zmiennymi — make (producent) i floor (piętro). Ważnym wnioskiem z tego kodu jest to, że funkcja __init__() jest wywoływana niejawnie. Nie trzeba wywoływać metody __init__() przy użyciu jej nazwy, ale jest ona wywoływana w momencie tworzenia obiektu, w tym wierszu kodu:

elevator = Elevator(1)

Niepoprawne użycie słowa kluczowego self

Aby podkreślić, jak działa parametr self , należy wziąć pod uwagę następujący kod, color w którym są przypisywane dwa atrybuty i make, w konstruktorze __init__():

class Car:
    def __init__():
        self.color = "Red" # ends up on the object
        make = "Mercedes" # becomes a local variable in the constructor

car = Car()
print(car.color) # "Red"
print(car.make) # would result in an error, `make` does not exist on the object

Jeśli celem było przypisanie atrybutów color i make do klasy Car (Samochód), trzeba zmodyfikować kod. W konstruktorze oba atrybuty muszą być przypisane do słowa kluczowego self, tak jak w tym przykładzie:

self.color = "Red" # ends up on the object
self.make = "Mercedes"

Napiwek

W ramach zadania domowego spróbuj utworzyć klasę na podstawie książki, którą chcesz przeczytać. Zastanów się, jak napisać tę klasę i jakie właściwości powinna mieć.