In the context of programming styles, it's definitely worthwhile to talk about object-oriented programming. It's really a different philosophy of programming than the procedural style that was prevalent for their early days of computing. And the idea, and this is a review of what we've discussed before. It says, software is a simulation of the real world. We kind of know how the real world works and we're going to design software to approximately modeled the real world. And that's a reasonable way to express a computation. So with procedural programming, we tell the computer to do this, tell the computer to do that, it's kind of like a verbs. With object oriented programming, we have data types, we identifiy things, the things in the world have properties or know something. And then it's more non-operative. What properties do they have and what do they do? That's what object-oriented programming is all about. The essential questions about object-oriented programming, or for any programming style, is it easy to write the program, is it easy to find errors and maintain it, is it correct and efficient? Now it takes a lot of experience to really be able to evaluate a programing style against these objectives. And let's just say in the past couple of decades object-oriented programming has emerged because of good answers to these questions. One of the essential features is that it really enables encapsulation. So we can hide information about code that we're writing and make the programs robust. When we get a module written that really expresses the competition, it needs to be done and that can be widely used. Really enables automatic type checking, really broadly, to be able to avoid and find errors in programs. Behavior of objects is tightly specified, and a lot of this can be automatically checked. And that's an important feature. And these two things, particularly encapsulation, mean that we can build huge libraries and reuse code, and we've talked about that. And then there's the idea of immutability for data that doesn't change. We can really make things stable, and we haven't emphasized that too much, but I'll mention that as a point. Now I want to say that there are a lot of deep and difficult and controversial issues around object-oriented programming. And if you really want to get into the arguments, in favor and against although it's different implications, it's certainly a worthwhile. But be advised that you might find more questions than answers out there. People are still debating these and we'll see a good example of this in the next segment. Does it make it easy to write and maintain correct and efficient programs? Well, you haven't really program much in another style. But the way that we've approached object-oriented programming, we hope that not that it does unable you to, through the encapsulating module of programming we've talked about. You can have big programs that are correct and efficient. This definitely an ongoing debate among experts on this, but still lots of Java program or Java economy is huge. So we're certainly reaping the benefits of the approach, for sure gone much farther than we would have just with purely procedural programs if C++ and Java hadn't come along. Those are definitely the predominant programming languages and they embrace objected-oriented programming. There's a little historical context. It's actually object-oriented programing has been around since the 1960's. In fact, Nygaard and Dahl won the Turing award for reinventing object oriented programming, and they did it for simulation. They developed a programming language called Simula that really was for simulating what goes on in the real world. And they're objects really were trying to simulate for engineering scientific purposes. Objects in the real world and time and space and so forth and that played a role. But they also studied the idea of formal reasoning about object-oriented programs, which is the basis for the automatic checks for errors that are so useful today. And then in the 1970s at Xerox PARC, Alan Kay developed a programming language called Smalltalk that really promoted object-oriented programming for widespread use. And we'll talk about Alan, he's quite a visionary, we'll talk about him on the next slide. And then also in the 1970s about the same time Barbara Liskov developed the CLU programming language. Which was really an amazing contribution that really pioneered the focus on data abstraction that we given this course and was the basis for Java and C++ and many other languages. So it's not something that came along by itself. It was really research contributions by really creative and talented and hardworking people. And I just want to mention Alan Kay because I think any student should know about characters like this. In the 1970s a typical computer filled an entire room. And this computer by the way didn't have anywhere near the capability of let say your mobile device. But at that time Xerox Palo Alto Research Center, the first personal computer was being developed, and that's quite a story in itself. And that thing was about the size of the refrigerator that students keep their in their dorm rooms nowadays. But at that same time, Alan Kay was working on this thing called the Dynabook. And his idea was that everybody should be able to carry around a little thing like a notebook with a keyboard on it that did everything they needed with regard to computation. And the key feature of Dynabook was object-oriented programming softwares Smalltalk. That is all the software for the Dynabook was being built in Smalltalk. And people were writing Smalltalk code on the Alto, but it was really to be code for the next thing which was going to be the Dynabook. That's in the 1970s when major universities and corporations were using these mainframes that filled a room. So that's a visionary scene, we're going to go from a room full of computers, and of course that's what we have. It's not much difference between a modern laptop or mobile device and the Alan Kay's Dynabook from 40 or 50 years earlier. And by the way the software on your laptop or mobile device is object-oriented programming software. These are two famous quotes from Alan Kay that I love. In the 1970s he said the best way to predict the future is to invent it, and surely that's the guy who did that. But then just before the turn of the century, he said the computer revolution hasn't happened yet. I think most people at that time thought that the computer revolution was pretty much over. Everybody had a computer. I'd say those quotes are still relevant today. We haven't even begun to see of the impact of computation on the world. And people are learning programming now, that means you are going to play a role in this. So think about people like Alan Kay as you face your next task with computation.