W czasach, gdy firmy zajmujące się sztuczną inteligencją i ich propagandziści serwują nam mnóstwo bzdur, nauka programowania jest ważniejsza niż kiedykolwiek. W tej czwartej części kursu programowania w Pythonie w systemie Linux będziemy dalej wyjaśniać, jak rozumieć paradygmat programowania obiektowego. Pamiętaj, że link do poprzedniej lekcji znajdziesz na końcu wpisu.
Chociaż agenci i modele sztucznej inteligencji potrafią rozumieć i pisać kod, to człowiek musi być w stanie udzielać im szczegółowych instrukcji. tego, co ma zrobić. W tym celu konieczne jest nie tylko zrozumienie problemu, który aplikacja chce rozwiązać, ale także zaprojektowanie rozwiązania z uwzględnieniem specyfiki języka.
Zobaczmy, czy uda nam się to wyjaśnić za pomocą analogii.
Robotnicy budowlani budują wieżowce. Zanim jednak rozpocznie się budowa, potrzebni są architekci, którzy zaprojektują plany, oraz inżynierowie, którzy wykonają obliczenia konstrukcyjne i zaprojektują przyłącza elektryczne, gazowe i wodne. Po ukończeniu budowy, projekt wnętrza będzie musiał zostać opracowany przez inne osoby. Oczywiście, doświadczeni pracownicy prawdopodobnie wykonają kompetentną pracę, pod warunkiem braku komplikacji. W praktyce jednak nikt nie chce podejmować takiego ryzyka.
Rzeczywistość jest taka, że kodowanie wibracji daje lepsze rezultaty, im bardziej szczegółowe są instrukcje A duże firmy doświadczyły przerw w świadczeniu usług, a ich bazy danych, których nie dało się odtworzyć, zostały usunięte przez nadmiernie przedsiębiorczych agentów sztucznej inteligencji dysponujących niewystarczającymi instrukcjami.
Kurs programowania w Pythonie z Linuksem
W poprzednich artykułach widzieliśmy, że model programowania obiektowego opiera się na czterech filarach: obiektach, klasach, metodach i atrybutach. Klasy to szablony używane do modelowania obiektów lub bytów, z którymi pracujemy. Szablony te definiują atrybuty, jakie będą miały obiekty, natomiast metody definiują zachowanie obiektu.
Różne elementy utworzone za pomocą szablonu ustanowionego w klasach nazywane są instancjami. Na przykład w klasie „Systemy operacyjne” mamy instancje: Linux, Windows, macOS. Możemy jednak chcieć utworzyć klasy, które będą się tylko nieznacznie różnić od istniejących klas. Nie ma potrzeby przepisywania kodu, ponieważ możemy skorzystać z funkcji programowania obiektowego, znanej jako dziedziczenie.
Przyjrzyjmy się poniższemu programowi z dodaną klasą.
Powodem, dla którego nie wklejam kodu bezpośrednio do artykułu, jest to, że - jak już wyjaśniłem - platforma, której używamy do publikowania bloga, nie obsługuje wcięć. Praktyka ta polega na dodawaniu spacji lub tabulatorów (należy zwrócić uwagę na znaki „lub tabulatory”, ponieważ nie można ich mieszać), co ułatwia zrozumienie kodu.
Wcięcia ułatwiają hierarchiczną strukturę kodu. Różnicowanie bloków kodu, takich jak pętle, funkcje czy klasy. Co więcej, jeśli nie zastosujesz odpowiednich wcięć w programach Python, nie będą one działać.
Teraz przeanalizujmy program linijka po linijce.
class Sistemas:
Jak widzieliśmy, program ten tworzy szablon, na podstawie którego będą tworzone instancje systemu operacyjnego.
def __init__(self, nombre, version, derivada):
Tutaj budujemy klasę. Pierwsza część to zautomatyzowana metoda stosowana za każdym razem, gdy coś zostaje utworzone. Elementy w nawiasach to parametry, które będzie miał obiekt. „Self” jest zawsze używane i odnosi się do obiektu. Zawsze występuje jako pierwsze. Pozostałe parametry to te, które ustaliliśmy na poprzednich zajęciach: nazwa dystrybucji Linuksa, wersja i dystrybucja, z której pochodzi.
self.nombre = nombre
self.version = version
self.derivada = derivada
Te linie służą do tworzenia atrybutów obiektu. Są to zmienne specyficzne dla obiektu, które działają jak zmienne w obrębie obiektu i zostaną zachowane w razie potrzeby.
def mostrar_info(self):
Ta metoda definiuje sposób wyświetlania informacji o atrybutach obiektu. Parametr `self` wskazuje, że należy używać wyłącznie parametrów zapisanych jako atrybuty.
print(f"Nombre: {self.nombre}")
print(f"Versión: {self.version}")
print(f"Derivada: {self.derivada}")
Te 3 wiersze wskazują, że informacje o atrybutach zostaną wyświetlone poprzez wydrukowanie ich na ekranie.
class SistemaConPeso(Sistemas):
W tym miejscu nasz program różni się od poprzedniego. Dodaliśmy nową rozszerzoną klasę zbudowaną na bazie poprzedniej. Dlatego nazwa poprzedniej klasy jest dodawana do nazwy klasy w nawiasach.
def __init__(self, nombre, version, derivada, peso):
To jest konstruktor klasy potomnej, prawie taki sam jak ten, który widzieliśmy wcześniej, ale dodający parametr wagi.
super().__init__(nombre, version, derivada)
Aby uniknąć powtarzania kodu, informujemy program za pomocą instrukcji super, że zadanie obsługi nazwy, wersji i pochodnej jest odpowiedzialnością klasy nadrzędnej.
self.peso = peso
Musieliśmy jeszcze zadbać o zapisanie atrybutu wagi.
def mostrar_info(self):
Ponieważ celem jest uniknięcie pisania dodatkowego kodu, zamiast tworzyć nową funkcję wyświetlającą dodatkowe dane, zmodyfikujemy tę, którą już mamy.
super().mostrar_info()
Wywołaj metodę klasy nadrzędnej, aby ustawić sposób wyświetlania przechowywanych w niej atrybutów.
print(f"Peso: {self.peso}
Dodaj informacje o tym, jak powinny być wyświetlane dane dla bieżącej klasy.
sistema = SistemaConPeso("Linux Mint", "22", "Ubuntu", "3GB")
Utwórz obiekt, w którym będą przechowywane informacje po dodaniu nowego parametru i zapisz go w zmiennej systemowej.
sistema.mostrar_info()
Wywołanie metody odpowiedzialnej za wyświetlanie informacji
Oczywiście, ten program nie ma żadnych praktycznych zastosowań. Nie miałoby sensu wprowadzanie wartości atrybutów do kodu, ponieważ programista byłby potrzebny za każdym razem, gdy trzeba coś zmodyfikować. Jak widzieliśmy w przykładzie z grą w kółko i krzyżyk, Python może odbierać i zapisywać informacje wprowadzane przez użytkownika za pomocą klawiatury. Może to również robić poprzez odczyt plików lub interakcję z bazami danych.
Był on jednak przydatny w wyjaśnianiu kluczowych pojęć programowania obiektowego, takich jak klasy, atrybuty, konstruktory, metody, dziedziczenie i polimorfizm. Obiecuję, że w następnym artykule zakończę omawianie programowania obiektowego i zacznę mówić o tym, jak działa Python.