请详细解释什么是面向对象编程，并且请用一个例子来说明它的作用和优势，回答需包含一个具体代码片段
user
面向对象编程（Object-Oriented Programming，简称OOP）是一种编程范式，它将程序组织成由对象组成的集合，每个对象都是某个类的实例，对象之间可以通过方法进行交互。OOP的核心思想包括：封装、继承和多态。

面向对象编程的优势包括：
1. **封装**：将数据和操作数据的方法绑定在一起，增强了代码的安全性和模块化。
2. **继承**：通过继承可以减少代码重复，子类可以继承父类的属性和方法。
3. **多态**：相同的接口可以有不同的实现，使得代码更加灵活。

例子：
```python
class Animal:
    def __init__(self, name):
        self.name = name

    def speak(self):
        raise NotImplementedError("Subclass must implement abstract method")

class Dog(Animal):
    def speak(self):
        return f"{self.name} says Woof!"

class Cat(Animal):
    def speak(self):
        return f"{self.name} says Meow!"

# Create instances of Dog and Cat
animals = [Dog("Rover"), Cat("Whiskers")]

# Call the speak method on each object
for animal in animals:
    print(animal.speak())
```

作用和优势：
这个例子展示了如何使用面向对象编程来创建`Animal`类和它的子类`Dog`和`Cat`。每个子类重写了`speak`方法，展示了多态性。这使得代码更具灵活性，易于扩展，例如可以轻松添加新的动物类型而不改变现有代码。
assistant