So the real insight for object oriented languages is that they can be universal, because you can add types, that you can add efficiently. And so you no longer have to invent a special language much like in the early days of programming languages where you went. And you invented Fortran for science, and Cobol for business, and Lisp for artificial intelligence. Now within a language like a Java, or like a, a C++, or a Python, where you allow natural type extensibility, and you allow it efficiently, you get to. Have the experts in a particular domain do the type extension so that people now can conveniently and naturally program in that domain. And that domain could be anything. Chemists can invent the language and the setup types they need. Their chemical molecules, DNA people, bio-informatics people can. Do everything they need in relation to the genome. And so what we really want is to understand how for your particular widget, for your particular domain, how we can create a widget type. What are the rules? What should be the natural way to build widgets? C. Which you're coming from has a form, but it's a primitive form of type extensibility. So you should already have a bit of experience here, and the experience will inform you, in terms of, and let you compare to. The more powerful aids that C++ gives you when you're doing type extension. So in C type extension, you typically created a new type by using the keyword struct. struct changes in C++. That was the critical insight that Bjarne, as a program language designer, had. He said, I'll stay with struct, but I'm going to add things to what you can do with it. And those things are going to be. The critical thing is struct in C would let you have what are called data members. You could say, oh, I want a struct. And I want it to be two items, like int a,b. And maybe they would define something we would call a pair. And now in C++, I not only have that, but I have the ability to have functions. That let me operate on pair. And those functions will be inside the scope. They will be scoped to the struct. In C++ because Bjarne started with struct. He wanted to retain C++ usage. He created as an alternative to struct, class. So C++ has redundancy. You don't find that redundancy, for example, in Java. Java you just have class. They were willing to start more from scratch. Bjarne wanted to keep all the old C stuff around for you, and he extended the meanings of struct, but he created class because class is what you should use when you really want full scale objects. So, as a C Programmer this should be reviewed. If you had a C type point as struct, so what we 're going to try and create here is your typical point. In the x,y plane. Here's your x,y plane. Here's some point, off in the x,y plane. And we want to be able to manipulate that. Why would we want to manipulate that? Well, we might have geometry problems, or we might be doing some drawing. We might be using a drawing package or where the creator of the drawing package. So we have this struct. struct has basically a struct name that's in effect now the new type. And it has two data members. And now we want to method, and C, this is all C, old C. So let's say we want to do what's natural. We have two points, we want to add them together. And the natural semantics for adding together is the x, the new x coordinate, is the x coordinate of the old points, point one and point two added together, and the y coordinates added together. So, if we had (7,2) here, then adding them together (wwith (2,5), we would get (9,7). That would be what plus would mean. We're doing this all in C. So notice there's no, it's sort of funky. There's no natural semantics to it. In C++, because we want an additive operation, go back to our ideas that we had when we overloaded days. We're able to give additional semantics to the operator. Again, this is why C++ is going to be better. We're going to be able to encapsulate point better. We're going to be able to give it more, a more natural-looking feel. So the C struct has fields. The fields are only data members. in C struct, we have file scope functions that manipulate the struct, typically using pointer operations. This is the classic way, you might say the primitive way, we have type extension in the C community.