Berbagi teknologi

Jelajahi Pemrograman [Berorientasi Objek Python]: Penjelasan mendetail tentang paradigma pemrograman tingkat lanjut di era baru

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

Daftar isi

1. Konsep pemrograman berorientasi objek (OOP)

1.1 Apa yang dimaksud dengan kelas dan objek?

1.2 Definisi kelas

1.3 Hubungan antara kelas dan objek

1.4 Pemahaman Xiao Li

2. Abstraksi

2.1 Konsep abstrak

2.2 Kelas dan metode abstrak

2.3 Pemahaman Xiao Li

3. Kelas dan instansi

3.1 Definisi dan instantiasi kelas

3.2 Atribut dan metode kelas

3.3 Pemahaman Xiao Li

4. Enkapsulasi/Antarmuka

4.1 Konsep enkapsulasi

4.2 Konsep antarmuka

4.3 Pemahaman Xiao Li

5. Warisan

5.1 Konsep pewarisan

5.2 Metode penulisan ulang

5.3 Pemahaman Xiao Li

6. Polimorfisme

6.1 Konsep polimorfisme

6.2 Menerapkan polimorfisme

6.3 Pemahaman Xiao Li

7. Introspeksi/Refleksi

7.1 Konsep introspeksi

7.2 Menggunakan introspeksi untuk operasi dinamis

7.3 Pemahaman Xiao Li

8. Metode statis dan metode kelas

8.1 Metode statis

8.2 Metode kelas

Meringkaskan


 

Kolom: catatan belajar python

Volume sebelumnya: Modularisasi Python dan manajemen paket

1. Konsep pemrograman berorientasi objek (OOP)

Pemrograman berorientasi objek (OOP) Merupakan paradigma pemrograman yang diimplementasikan dengan mengorganisasikan program ke dalam kumpulan objek. Objek tidak hanya berisi data tetapi juga metode untuk memanipulasi data tersebut. Konsep inti OOP mencakup kelas, objek, properti, dan metode.

1.1 Apa yang dimaksud dengan kelas dan objek?

  • Kelas Merupakan template atau cetak biru yang digunakan untuk membuat objek. Kelas mendefinisikan properti dan perilaku objek.
  • Obyek Merupakan turunan dari kelas. Membuat objek adalah membuat instance tertentu berdasarkan kelasnya.

contoh:

  1. class Dog:
  2. # 类的初始化方法
  3. def __init__(self, name, age):
  4. self.name = name # 属性
  5. self.age = age # 属性
  6. # 方法
  7. def bark(self):
  8. return f"{self.name} says Woof!"
  9. # 创建对象
  10. my_dog = Dog("Rex", 5)
  11. print(my_dog.bark())

1.2 Definisi kelas

Di Python, kelas lulus class Definisi kata kunci. Fungsi dalam suatu kelas disebut metode dan variabel disebut properti.Metode kelas biasanya dimulai denganself Sebagai parameter pertama, mewakili instance itu sendiri.

contoh:

  1. class Cat:
  2. def __init__(self, name):
  3. self.name = name
  4. def meow(self):
  5. return f"{self.name} says Meow!"
  6. # 创建对象
  7. my_cat = Cat("Whiskers")
  8. print(my_cat.meow())

1.3 Hubungan antara kelas dan objek

Kelas adalah templat untuk suatu objek dan mendefinisikan struktur dan perilaku objek. Objek adalah turunan dari kelas, dan setiap objek memiliki properti dan metode independen.

  1. class Person:
  2. def __init__(self, name, age):
  3. self.name = name
  4. self.age = age
  5. def greet(self):
  6. return f"Hello, my name is {self.name} and I am {self.age} years old."
  7. # 创建多个对象
  8. person1 = Person("Alice", 30)
  9. person2 = Person("Bob", 25)
  10. print(person1.greet())
  11. print(person2.greet())

1.4 Pemahaman Xiao Li

Kelas itu seperti cetakan kue, kelas menentukan bentuk dan ukuran kue. Benda ibarat kue beton yang terbuat dari cetakan. Setiap kue dapat mempunyai rasa (sifat) yang berbeda, namun bentuk dan ukuran (struktur dan perilakunya) sama.

2. Abstraksi

abstrak Hal ini mengacu pada penyederhanaan permasalahan dunia nyata yang kompleks dengan memanfaatkan fitur-fitur utama dan mengabaikan detailnya. Dalam pemrograman, abstraksi membantu kita membuat kode yang lebih ringkas dan mudah dipelihara.

2.1 Konsep abstrak

Abstraksi adalah tentang mengekstraksi fitur utama suatu objek sambil mengabaikan detail yang tidak penting. Melalui abstraksi, kita dapat fokus pada fungsi inti suatu objek tanpa terganggu oleh fitur sekunder.

contoh:

  1. class Animal:
  2. def __init__(self, name):
  3. self.name = name
  4. def make_sound(self):
  5. pass # 抽象方法,不具体实现
  6. class Dog(Animal):
  7. def make_sound(self):
  8. return "Woof!"
  9. class Cat(Animal):
  10. def make_sound(self):
  11. return "Meow!"
  12. # 创建对象
  13. dog = Dog("Rex")
  14. cat = Cat("Whiskers")
  15. print(dog.make_sound())
  16. print(cat.make_sound())

2.2 Kelas dan metode abstrak

Di Python, kita dapat mencapai abstraksi dengan mendefinisikan kelas abstrak dan metode abstrak. Kelas abstrak tidak dapat dipakai, hanya diwariskan. Metode abstrak didefinisikan di kelas abstrak tetapi diimplementasikan di subkelas.

contoh:

  1. from abc import ABC, abstractmethod
  2. class Vehicle(ABC):
  3. @abstractmethod
  4. def start_engine(self):
  5. pass
  6. class Car(Vehicle):
  7. def start_engine(self):
  8. return "Car engine started"
  9. class Motorcycle(Vehicle):
  10. def start_engine(self):
  11. return "Motorcycle engine started"
  12. # 创建对象
  13. car = Car()
  14. motorcycle = Motorcycle()
  15. print(car.start_engine())
  16. print(motorcycle.start_engine())

2.3 Pemahaman Xiao Li

Abstraksi seperti mereduksi lukisan kompleks menjadi bentuk geometris. Misalnya kucing tertentu memiliki banyak ciri (warna bulu, ukuran, umur, dll), namun kita hanya fokus pada ciri mengeong. Ini adalah abstraksi kucing.

3. Kelas dan instansi

Kelas dan instance Ini adalah dasar dari OOP. Kelas adalah template dan instance adalah objek konkrit. Instance dibuat dari suatu kelas dan memiliki properti serta metode yang ditentukan oleh kelas tersebut.

3.1 Definisi dan instantiasi kelas

Mendefinisikan kelas dan membuat sebuah instance adalah operasi dasar OOP. Kelas mendefinisikan properti dan metode, dan instance adalah objek konkret kelas.

contoh:

  1. class Student:
  2. def __init__(self, name, grade):
  3. self.name = name
  4. self.grade = grade
  5. def introduce(self):
  6. return f"Hi, I am {self.name} and I am in grade {self.grade}."
  7. # 创建实例
  8. student1 = Student("Alice", 10)
  9. student2 = Student("Bob", 12)
  10. print(student1.introduce())
  11. print(student2.introduce())

3.2 Atribut dan metode kelas

Atribut suatu kelas adalah keadaan objeknya, dan metodenya adalah perilaku objeknya.Atribut kelas lulus__init__ Inisialisasi metode, metode didefinisikan di kelas.

contoh:

  1. class Book:
  2. def __init__(self, title, author):
  3. self.title = title
  4. self.author = author
  5. def get_info(self):
  6. return f"'{self.title}' by {self.author}"
  7. # 创建实例
  8. book = Book("1984", "George Orwell")
  9. print(book.get_info())

3.3 Pemahaman Xiao Li

Kelas dan contoh seperti gambar sebuah rumah dan rumah sebenarnya. Gambar (kelas) menjelaskan struktur dan fungsi rumah, sedangkan rumah sebenarnya (contoh) adalah benda beton yang dibangun sesuai gambar.

4. Enkapsulasi/Antarmuka

enkapsulasi Itu menyembunyikan status objek (properti) dan perilaku (metode) di dalam kelas dan berinteraksi dengan dunia luar melalui antarmuka (metode). Enkapsulasi meningkatkan keamanan dan pemeliharaan kode.

4.1 Konsep enkapsulasi

Enkapsulasi adalah salah satu konsep inti OOP. Enkapsulasi ini melindungi data objek dengan menyembunyikan keadaan internal objek dan hanya menampilkan antarmuka yang diperlukan. Dengan cara ini, kode eksternal tidak dapat secara langsung mengakses atau mengubah keadaan internal objek, dan hanya dapat memanipulasi data melalui metode yang disediakan oleh objek tersebut.

contoh:

  1. class Account:
  2. def __init__(self, owner, balance=0):
  3. self.owner = owner
  4. self.__balance = balance # 私有属性
  5. def deposit(self, amount):
  6. if amount > 0:
  7. self.__balance += amount
  8. else:
  9. raise ValueError("Deposit amount must be positive")
  10. def withdraw(self, amount):
  11. if 0 < amount <= self.__balance:
  12. self.__balance -= amount
  13. else:
  14. raise ValueError("Insufficient funds or invalid amount")
  15. def get_balance(self):
  16. return self.__balance
  17. # 创建实例
  18. account = Account("John")
  19. account.deposit(100)
  20. print(account.get_balance())

4.2 Konsep antarmuka

Antarmuka adalah satu-satunya cara suatu objek berinteraksi dengan dunia luar. Melalui antarmuka, kode eksternal dapat memanggil metode objek tetapi tidak dapat mengakses keadaan internal objek secara langsung.

contoh:

  1. class Car:
  2. def __init__(self, model):
  3. self.model = model
  4. self.__engine_started = False
  5. def start_engine(self):
  6. if not self.__engine_started:
  7. self.__engine_started = True
  8. return "Engine started"
  9. else:
  10. return "Engine is already running"
  11. def stop_engine(self):
  12. if self.__engine_started:
  13. self.__engine_started = False
  14. return "Engine stopped"
  15. else:
  16. return "Engine is not running"
  17. # 创建实例
  18. car = Car("Toyota")
  19. print(car.start_engine())
  20. print(car.stop_engine())

4.3 Pemahaman Xiao Li

Kemasannya seperti casing ponsel. Sirkuit dan komponen (keadaan objek) di dalam ponsel dikemas dalam casing. Pengguna hanya dapat berinteraksi dengan ponsel melalui tombol dan layar (antarmuka), tetapi tidak dapat langsung menghubungi komponen internal.

5. Warisan

mewarisi Merupakan konsep inti lain dari OOP, yang memungkinkan kita membuat kelas baru berdasarkan kelas yang sudah ada. Kelas baru mewarisi semua properti dan metode dari kelas yang ada.

5.1 Konsep pewarisan

Warisan adalah ketika satu kelas (subkelas) memperoleh properti dan metode dari kelas lain (kelas induk). Melalui pewarisan, subkelas dapat menggunakan kembali kode kelas induk, menambahkan properti dan metode baru, atau mengganti metode kelas induk.

contoh:

  1. class Animal:
  2. def __init__(self, name):
  3. self.name = name
  4. def speak(self):
  5. pass
  6. class Dog(Animal):
  7. def speak(self):
  8. return "Woof!"
  9. class Cat(Animal):
  10. def speak(self):
  11. return "Meow!"
  12. # 创建实例
  13. dog = Dog("Rex")
  14. cat = Cat("Whiskers")
  15. print(dog.speak())
  16. print(cat.speak())

5.2 Metode penulisan ulang

Subkelas dapat mengganti metode kelas induk, yaitu mendefinisikan metode dengan nama yang sama dengan kelas induk di subkelas untuk mencapai fungsi yang berbeda.

contoh:

  1. class Shape:
  2. def area(self):
  3. return 0
  4. class Rectangle(Shape):
  5. def __init__(self, width, height):
  6. self.width = width
  7. self.height = height
  8. def area(self):
  9. return self.width * self.height
  10. class Circle(Shape):
  11. def __init__(self, radius):
  12. self.radius = radius
  13. def area(self):
  14. return 3.14 * (self.radius ** 2)
  15. # 创建实例
  16. rectangle = Rectangle(3, 4)
  17. circle = Circle(5)
  18. print(rectangle.area())
  19. print(circle.area())

5.3 Pemahaman Xiao Li

Warisan itu seperti warisan yang diberikan orang tua kepada anaknya. Orang tua (kelas induk) mewariskan properti mereka (properti dan metode) kepada anak-anak mereka (subkelas), dan anak-anak tidak hanya dapat menggunakan properti ini, tetapi juga menjadi lebih kaya melalui usaha mereka sendiri (menambahkan properti dan metode baru).

6. Polimorfisme

Polimorfisme Artinya metode yang sama mempunyai manifestasi yang berbeda pada objek yang berbeda. Polimorfisme memungkinkan kita memanggil metode objek berbeda melalui antarmuka yang sama untuk mencapai fungsi berbeda.

6.1 Konsep polimorfisme

Polimorfisme adalah salah satu fitur penting OOP. Ini menunjuk ke objek subkelas melalui referensi kelas induk, memungkinkan metode yang sama memiliki implementasi berbeda. Polimorfisme meningkatkan fleksibilitas dan skalabilitas kode.

contoh:

  1. class Animal:
  2. def speak(self):
  3. pass
  4. class Dog(Animal):
  5. def speak(self):
  6. return "Woof!"
  7. class Cat(Animal):
  8. def speak(self):
  9. return "Meow!"
  10. def animal_sound(animal):
  11. print(animal.speak())
  12. # 创建实例
  13. dog = Dog()
  14. cat = Cat()
  15. animal_sound(dog)
  16. animal_sound(cat)

 

6.2 Menerapkan polimorfisme

Dalam Python, polimorfisme biasanya diimplementasikan melalui penggantian metode dan referensi kelas induk. Dengan menunjuk ke objek subkelas melalui referensi kelas induk, Anda bisa memanggil metode subkelas.

contoh:

  1. class Shape:
  2. def draw(self):
  3. pass
  4. class Rectangle(Shape):
  5. def draw(self):
  6. return "Drawing a rectangle"
  7. class Circle(Shape):
  8. def draw(self):
  9. return "Drawing a circle"
  10. def draw_shape(shape):
  11. print(shape.draw())
  12. # 创建实例
  13. rectangle = Rectangle()
  14. circle = Circle()
  15. draw_shape(rectangle)
  16. draw_shape(circle)

 

6.3 Pemahaman Xiao Li

Polimorfisme seperti remote control universal. Baik itu mengontrol TV, AC, atau stereo, selama perangkat ini memiliki antarmuka (metode) yang sesuai, remote control (referensi kelas induk) dapat mengimplementasikan fungsi yang berbeda melalui tombol yang sama (panggilan metode).

7. Introspeksi/Refleksi

introspeksi Artinya objek dapat mengetahui informasinya sendiri pada saat runtime. Python menyediakan beberapa fungsi bawaan untuk introspeksi, sepertitype()id()hasattr() Tunggu.

7.1 Konsep introspeksi

Introspeksi berarti suatu objek dapat memperoleh informasinya sendiri saat runtime, seperti properti, metode, dll. Introspeksi membuat program Python sangat dinamis dan fleksibel.

contoh:

  1. class Person:
  2. def __init__(self, name, age):
  3. self.name = name
  4. self.age = age
  5. person = Person("Alice", 30)
  6. # 使用内置函数进行自省
  7. print(type(person))
  8. print(hasattr(person, "name"))
  9. print(getattr(person, "name"))
  10. setattr(person, "name", "Bob")
  11. print(person.name)
  12. delattr(person, "name")

7.2 Menggunakan introspeksi untuk operasi dinamis

Melalui introspeksi, kita dapat memanipulasi properti dan metode objek secara dinamis saat runtime, menjadikan program lebih fleksibel dan dinamis.

contoh:

  1. class Car:
  2. def __init__(self, model):
  3. self.model = model
  4. self.speed = 0
  5. def accelerate(self):
  6. self.speed += 5
  7. return self.speed
  8. car = Car("Toyota")
  9. # 动态操作对象
  10. if hasattr(car, "accelerate"):
  11. method = getattr(car, "accelerate")
  12. print(method())
  13. print(method())
  14. # 动态设置属性
  15. setattr(car, "color", "red")
  16. print(car.color)

7.3 Pemahaman Xiao Li

Introspeksi diri itu seperti bercermin. Melalui cermin (mekanisme introspeksi), manusia dapat melihat seperti apa dirinya (sifat dan metode objek) dan melakukan penyesuaian sesuai kebutuhan (manipulasi objek secara dinamis).

8. Metode statis dan metode kelas

metode statis Danmetode kelas adalah metode yang terkait dengan kelas, bukan instance.Penggunaan metode statis@staticmethod Dekorator, penggunaan metode kelas@classmethod Penghias.

8.1 Metode statis

Metode statis adalah metode suatu kelas, tetapi tidak terikat pada instance kelas mana pun. Metode statis tidak dapat mengakses instance suatu kelas, juga tidak dapat mengubah status kelas. Mereka biasanya digunakan untuk melakukan beberapa operasi yang tidak ada hubungannya dengan kelas, tetapi secara logis milik fungsionalitas kelas.

contoh:

  1. class Math:
  2. @staticmethod
  3. def add(a, b):
  4. return a + b
  5. print(Math.add(5, 3))

 

8.2 Metode kelas

Metode kelas adalah metode yang terikat pada kelas, bukan pada instance.Argumen pertama pada metode kelas adalah kelas itu sendiri, biasanya diberi namacls . Metode kelas dapat mengakses properti kelas dan metode kelas lainnya.

contoh:

  1. class Math:
  2. factor = 2
  3. @classmethod
  4. def multiply(cls, value):
  5. return cls.factor * value
  6. print(Math.multiply(5))

Meringkaskan

Semua aspek pemrograman berorientasi objek dengan Python, termasuk konsep dasar pemrograman berorientasi objek, abstraksi, kelas dan instance, enkapsulasi, pewarisan, polimorfisme, introspeksi, serta metode statis dan kelas.

Saya harap blog mendetail ini dapat membantu Anda memahami lebih dalam pemrograman berorientasi objek dengan Python dan menerapkan pengetahuan ini dalam proyek nyata. Jika Anda memiliki pertanyaan atau memerlukan bantuan lebih lanjut, jangan ragu untuk menghubungi saya!