Hi, welcome to this new lesson. We're going to start Week 4, where we're going to be discovering the power of object-oriented programming. Object-oriented programming is a really exciting topic that I was really looking forward to reach because it really opens up for you a whole range of techniques and methodologies that you can use and really start expanding much more the power of programming in Python and other languages that use object-oriented programming as a paradigm, really benefit from the increasing reusability and possibilities with code that is written in such a way. Let's learn a little bit of what object-oriented programming means. The principle of object-oriented programming is the idea that you can actually construct an object through the process of creating a class. A class is an outline of an object. As we have it here, let's look at this diagram. We have the idea of creating an object like a dog, and we will have certain attributes, certain characteristics that this dog will contain. We have the idea of a name. Maybe the species of the dog, the age. Then there's also a series of action, a series of maybe functions that this dog as an object will perform, something like barking or fetching. If we look behind the hood of this object, we have a structure to it. We have a class name that defines what is this class. We have some data. As we can see from the outline, some data that is contained within this object, and then we have a series of functions. All of this packaged together is what we would actually call a class, that would be, again, an outline of an object. Let's understand how, before we actually write, the code and understand the syntax for how to write a class, how we can actually make use of this class. If we have the class dog, that means that we could have perhaps maybe many instances of this class. We can see on the right, what we are calling an instance of a class is in fact a construction and an entity that will operate within our script, in our simulation, in processing. In the case of the instance, the data that we're calling name would actually have a specific name. You could imagine, I don't know, Max dog. Then the species will be a specific kind of dog, and then also a particular age. That doesn't mean that all dogs have that age, except in this particular instance of the dog has that age. Also, it might not be barking all the time. It might be sometimes barking, so the function bark might be executed at certain times. We can have, as I mentioned, multiple instances of a class. This is the power of the reusability of a piece of code that we write as a template for a type of object, an object that we will actually be able to reuse. But each time we construct a new object, in this case, a new dog, that new dog might have different pieces of data, might have different names as we have them in the real world, different age, and so on, and they might invoke their barking function and their fetching function at different times. Classes are an incredibly useful tool to think of modular forms of programming, scalable forms of programming, where you could actually write this code and reuse it. You could even write it in such a way that it's completely self-packaged and you can move it around. It really starts opening up what we can actually do with programming and really scaling our programming skills. I'm going to move forward to just show you the syntax of a class and we'll start writing classes together in the next few lessons.