Difference between revisions of "Seminar with Alan Kay on Object Oriented Programming"

From Viewpoints Intelligent Archive
Jump to: navigation, search
(Created page with "{{#evt: service=youtubeIA |id=QjJaFG63Hlo |alignment=left |autoresize=false }}")
 
 
Line 3: Line 3:
 
|id=QjJaFG63Hlo
 
|id=QjJaFG63Hlo
 
|alignment=left
 
|alignment=left
|autoresize=false
+
|autoresize=true
 
}}
 
}}
 +
 +
<subtitle id='00:00:00'> [Music] good idea to put up a slide warning you</subtitle>
 +
<subtitle id='00:00:07'>there might be some IBM jokes of course this isn't I guess this isn't really IBM</subtitle>
 +
<subtitle id='00:00:12'>country out here although I did hear a rumor that you're still programmed in</subtitle>
 +
<subtitle id='00:00:19'>Fortran quite a bit and even the dread word COBOL was heard so maybe it's</subtitle>
 +
<subtitle id='00:00:25'>worthwhile you know object-oriented programming is actually a rather old technology it is</subtitle>
 +
<subtitle id='00:00:34'>just a few years younger in fact than the kind of programming technology that</subtitle>
 +
<subtitle id='00:00:40'>most people are used to that of data structures manipulated by procedures and</subtitle>
 +
<subtitle id='00:00:46'>for various reasons it has not come into</subtitle>
 +
<subtitle id='00:00:50'>currency into vogue until the last couple of years but it's actually about</subtitle>
 +
<subtitle id='00:00:55'>25 years ago I wrote my first program that I would call object-oriented in</subtitle>
 +
<subtitle id='00:01:00'>1962 and people have been writing</subtitle>
 +
<subtitle id='00:01:04'>programs in that style even earlier than</subtitle>
 +
<subtitle id='00:01:08'>that in my particular case I was a programmer in the Air Force at Air</subtitle>
 +
<subtitle id='00:01:15'>Training Command in 1962 the there were</subtitle>
 +
<subtitle id='00:01:19'>no standardized operating systems of course that's true today</subtitle>
 +
<subtitle id='00:01:25'>but back then there was actually a reason for it</subtitle>
 +
<subtitle id='00:01:29'>nobody had gotten around to the idea of thinking it it might be useful and Air</subtitle>
 +
<subtitle id='00:01:33'>Training Command had a problem of moving</subtitle>
 +
<subtitle id='00:01:38'>tapes tapes with records of various</subtitle>
 +
<subtitle id='00:01:43'>kinds on them from one Air Training Command base to another the machines</subtitle>
 +
<subtitle id='00:01:49'>back borrows two twenties which were</subtitle>
 +
<subtitle id='00:01:53'>machines that have had about five thousand characters of of storage we're</subtitle>
 +
<subtitle id='00:01:58'>about the size of this room and we're great coffee warmers my image of them of</subtitle>
 +
<subtitle id='00:02:04'>the 220 is with a this huge set of boxes with a row of pots on top trapping the</subtitle>
 +
<subtitle id='00:02:12'>heat is a came out now the problem that</subtitle>
 +
<subtitle id='00:02:17'>they had was that there is no way to standardize on what the formats of the</subtitle>
 +
<subtitle id='00:02:22'>different records were they changed and the operating system he was usually just</subtitle>
 +
<subtitle id='00:02:28'>the kind of a loading program and so there was no way of standardizing on</subtitle>
 +
<subtitle id='00:02:32'>that and they wondered how can we actually read these data records if</subtitle>
 +
<subtitle id='00:02:38'>everything is constantly changing and nothing holds still somebody thought up</subtitle>
 +
<subtitle id='00:02:42'>a great idea that idea was to have the</subtitle>
 +
<subtitle id='00:02:48'>records shipped in the following format the each tape file had three sections to</subtitle>
 +
<subtitle id='00:02:55'>it the front section was fairly short it had a bunch of relative pointers into</subtitle>
 +
<subtitle id='00:03:01'>the second section which contained a bunch of Burroughs 220 code and that</subtitle>
 +
<subtitle id='00:03:07'>code knew how to deal with a third section which had the actual data records and so what you got when you</subtitle>
 +
<subtitle id='00:03:15'>read a record from this machine was you</subtitle>
 +
<subtitle id='00:03:20'>read that record the first two parts of the of the record into storage use the</subtitle>
 +
<subtitle id='00:03:29'>the front part of it which were these indirect jumps into the second part of</subtitle>
 +
<subtitle id='00:03:34'>it the code as the protocol for dealing with the tape</subtitle>
 +
<subtitle id='00:03:38'>they're usually about 20 or 30 what we would call messages today but 20 or 30</subtitle>
 +
<subtitle id='00:03:44'>entries in the in that first table and the code that came along with the tape</subtitle>
 +
<subtitle id='00:03:49'>records knew how to deal with all the data so in current day terms what the</subtitle>
 +
<subtitle id='00:03:55'>Air Training Command was doing I think it was as far ago as the late 50s was to</subtitle>
 +
<subtitle id='00:04:01'>ship an entire class of objects the</subtitle>
 +
<subtitle id='00:04:05'>class was shipped with the protocol with</subtitle>
 +
<subtitle id='00:04:10'>all of the code and with all of the data in a form in which you did not have to</subtitle>
 +
<subtitle id='00:04:14'>penetrate any of it in order to make use of it that was used for a number of</subtitle>
 +
<subtitle id='00:04:20'>years as a technique until COBOL came in</subtitle>
 +
<subtitle id='00:04:24'>and the Air Force forced all of the all of those good ideas to go away in order</subtitle>
 +
<subtitle id='00:04:29'>to standardize and COBOL which is a much weaker conception going back to the</subtitle>
 +
<subtitle id='00:04:33'>notion of data structures that are fragile now I understand that we have a</subtitle>
 +
<subtitle id='00:04:39'>kind of a mixed audience today in that some of the people in the room are</subtitle>
 +
<subtitle id='00:04:43'>rather knowledgeable about object-oriented programming some of the</subtitle>
 +
<subtitle id='00:04:47'>people in the audience are here out of curiosity so I made a kind of a mixed</subtitle>
 +
<subtitle id='00:04:55'>talk what I would like to do is to give</subtitle>
 +
<subtitle id='00:04:59'>you sort of a perspective on where object-oriented programming has been</subtitle>
 +
<subtitle id='00:05:04'>what it's what it's been done without without getting to historical about it</subtitle>
 +
<subtitle id='00:05:08'>but try and give you an understanding of why it has contributed so much in a</subtitle>
 +
<subtitle id='00:05:14'>number of areas other than just writing programs that don't break one of those</subtitle>
 +
<subtitle id='00:05:21'>is user interface which is a very important area and there are some direct</subtitle>
 +
<subtitle id='00:05:26'>relations chips to the way we think about objects and the way we think about</subtitle>
 +
<subtitle id='00:05:31'>user interface and then take you into</subtitle>
 +
<subtitle id='00:05:36'>the future a little bit and show you some of the things in which object-oriented programming is being</subtitle>
 +
<subtitle id='00:05:40'>used for in research directions and then try and open up the form into issues</subtitle>
 +
<subtitle id='00:05:47'>because my belief is that the basic ideas of object-oriented</subtitle>
 +
<subtitle id='00:05:51'>are quite simple maybe too simple to be</subtitle>
 +
<subtitle id='00:05:56'>popular until we absolutely require</subtitle>
 +
<subtitle id='00:06:00'>simplicity in this stage of 2 million line programs but that the most</subtitle>
 +
<subtitle id='00:06:05'>interesting thing about object-oriented programming are the are the various</subtitle>
 +
<subtitle id='00:06:09'>issues and the styles for using it and those haven't settled yet so my</subtitle>
 +
<subtitle id='00:06:15'>reference to the IBM joke I think a good good way of starting out the talk is</subtitle>
 +
<subtitle id='00:06:19'>that last year it was even reported in</subtitle>
 +
<subtitle id='00:06:23'>Business Week as a significant event IBM had its first object-oriented colloquium</subtitle>
 +
<subtitle id='00:06:31'>it was such an amazing thing they believe that only 25 people would attend</subtitle>
 +
<subtitle id='00:06:37'>and in fact 500 attended and they had to turn away 500 people from within IBM I</subtitle>
 +
<subtitle id='00:06:45'>got invited to give the keynote talk part of what I'm going to show you today is from that keynote talk and standing</subtitle>
 +
<subtitle id='00:06:52'>there in Yorktown Heights giving the</subtitle>
 +
<subtitle id='00:06:56'>giving the talk I was reminded of William James's characterization of the</subtitle>
 +
<subtitle id='00:07:01'>three stages that an idea goes through the first stage is the new idea is</subtitle>
 +
<subtitle id='00:07:07'>characterized as the work of mad been</subtitle>
 +
<subtitle id='00:07:11'>absolutely denounced out of hand a few years later goes through a different</subtitle>
 +
<subtitle id='00:07:17'>stage when it's remarked on as being commonplace and obvious all the time</subtitle>
 +
<subtitle id='00:07:21'>then the third and final stage is when the original denouncer is claimed to</subtitle>
 +
<subtitle id='00:07:25'>have invented it and we are now in that</subtitle>
 +
<subtitle id='00:07:30'>third stage for object-oriented programming because now that iBM has decided to adopt I've yet</subtitle>
 +
<subtitle id='00:07:36'>I'm Jacobian program we can be quite sure that it's actually obsolete</subtitle>
 +
<subtitle id='00:07:40'>and on its way out</subtitle>
 +
<subtitle id='00:07:45'>so now before before I get into the</subtitle>
 +
<subtitle id='00:07:51'>historical part what I thought I'd do is</subtitle>
 +
<subtitle id='00:07:55'>for those people who are not acquainted with it at all I thought I would just</subtitle>
 +
<subtitle id='00:08:00'>say a couple of couple of words about</subtitle>
 +
<subtitle id='00:08:04'>what it what I mean when I say object-oriented programming and I have a</subtitle>
 +
<subtitle id='00:08:11'>I have a very simple diagram here for me</subtitle>
 +
<subtitle id='00:08:16'>the whole notion of objects was</subtitle>
 +
<subtitle id='00:08:20'>triggered off by seeing a number of different systems some of them in</subtitle>
 +
<subtitle id='00:08:26'>computer science but the first ones that I looked at were actually biological I</subtitle>
 +
<subtitle id='00:08:30'>have a degree in molecular biology and</subtitle>
 +
<subtitle id='00:08:35'>one of the things that struck me when I was studying molecular biology many years ago was that compared to the kinds</subtitle>
 +
<subtitle id='00:08:43'>of structures that we tend to build here on earth the average biological</subtitle>
 +
<subtitle id='00:08:48'>structure is more than a thousand times as complex both as regard to the number</subtitle>
 +
<subtitle id='00:08:54'>of different parts it has and to the</subtitle>
 +
<subtitle id='00:08:59'>complexity that has to be controlled for</subtitle>
 +
<subtitle id='00:09:03'>instance a grand piano is a rather complex machine has about 20,000 parts</subtitle>
 +
<subtitle id='00:09:09'>which surprises most musicians you don't even think that they're actually playing</subtitle>
 +
<subtitle id='00:09:13'>on a machine they think of it as an instrument and the instrument by</subtitle>
 +
<subtitle id='00:09:18'>definition can't be a machine but in fact it is a machine has about 20,000</subtitle>
 +
<subtitle id='00:09:22'>parts our bodies have approximately a</subtitle>
 +
<subtitle id='00:09:27'>trillion cells in them and each cell is</subtitle>
 +
<subtitle id='00:09:31'>rather complex each cell has many millions of components in its own right</subtitle>
 +
<subtitle id='00:09:37'>so one of the ways nature discovered to</subtitle>
 +
<subtitle id='00:09:43'>control complexity and the kinds of interactions that are likely to happen</subtitle>
 +
<subtitle id='00:09:48'>is to try and incapsulate them in</subtitle>
 +
<subtitle id='00:09:52'>various ways this is a familiar principle to us it's something that we use in regular program</subtitle>
 +
<subtitle id='00:09:56'>as well trying to encapsulate and the</subtitle>
 +
<subtitle id='00:10:00'>question you're always asking when you encapsulate we're going to ask this</subtitle>
 +
<subtitle id='00:10:04'>quite a bit later is just what is encapsulated what kinds of things are we</subtitle>
 +
<subtitle id='00:10:10'>trying to control are usually in regular programming what we encapsulate are</subtitle>
 +
<subtitle id='00:10:15'>sections of programs that occasionally</subtitle>
 +
<subtitle id='00:10:19'>will try and encapsulate with regard to a protocol for dealing with some system</subtitle>
 +
<subtitle id='00:10:23'>we don't want to inquire about the internals of what biological systems</subtitle>
 +
<subtitle id='00:10:28'>encapsulate is the actual environment in</subtitle>
 +
<subtitle id='00:10:32'>which most important processing takes place there are very few object-oriented</subtitle>
 +
<subtitle id='00:10:38'>programming languages that go that far the average object-oriented programming</subtitle>
 +
<subtitle id='00:10:43'>language encapsulate snot the environment but in fact something like</subtitle>
 +
<subtitle id='00:10:50'>the state of a data structure along with</subtitle>
 +
<subtitle id='00:10:54'>the procedures that know how to intimately manipulate it and try and tie</subtitle>
 +
<subtitle id='00:10:58'>those two areas together in a way that</subtitle>
 +
<subtitle id='00:11:02'>they cannot be penetrated from the outside when people speak of an</subtitle>
 +
<subtitle id='00:11:09'>object-oriented programming language like Objective C or C++ they're talking</subtitle>
 +
<subtitle id='00:11:14'>about even less than that because they're the encapsulation is almost a</subtitle>
 +
<subtitle id='00:11:21'>convention it's done by means of macros</subtitle>
 +
<subtitle id='00:11:25'>the amount of protection at runtime that</subtitle>
 +
<subtitle id='00:11:29'>is delivered is rather low so there all</subtitle>
 +
<subtitle id='00:11:33'>of these gradations now biological systems encapsulate with a vengeance</subtitle>
 +
<subtitle id='00:11:37'>because nature discovered that if you</subtitle>
 +
<subtitle id='00:11:41'>give each cell its own little captured ocean and let it devote about 90% of its</subtitle>
 +
<subtitle id='00:11:49'>actual energies to simply protecting</subtitle>
 +
<subtitle id='00:11:53'>itself from the outside world as though the outside world were hostile then you</subtitle>
 +
<subtitle id='00:11:58'>get a situation where you can build very large structures rather safely and</subtitle>
 +
<subtitle id='00:12:03'>encapsulated is not just the saline solution not just the organic Moloch</subtitle>
 +
<subtitle id='00:12:10'>skills but also encapsulated and not</subtitle>
 +
<subtitle id='00:12:14'>just the programs that drive the cell but in fact encapsulated in biological</subtitle>
 +
<subtitle id='00:12:19'>organisms as many of you are aware is the entire plan for the entire structure</subtitle>
 +
<subtitle id='00:12:25'>okay now we don't generally do that when</subtitle>
 +
<subtitle id='00:12:29'>we write an object-oriented program but in fact people are starting to do that</subtitle>
 +
<subtitle id='00:12:33'>now in artificial intelligence and people who are interested can can bring</subtitle>
 +
<subtitle id='00:12:38'>this up later so my particular</subtitle>
 +
<subtitle id='00:12:52'>my particular motivation</subtitle>
 +
<subtitle id='00:12:59'>when I started thinking about objects</subtitle>
 +
<subtitle id='00:13:06'>was simply that of biological cells and</subtitle>
 +
<subtitle id='00:13:11'>one of the things that is difficult to escape when you look at biological cells</subtitle>
 +
<subtitle id='00:13:16'>is first the extent to which the outside</subtitle>
 +
<subtitle id='00:13:20'>world is kept away from the cell membrane and then the other thing is is</subtitle>
 +
<subtitle id='00:13:25'>that the cells aren't completely in isolation they communicate by means of</subtitle>
 +
<subtitle id='00:13:29'>sending messages to each other and again the way we way we translate that into</subtitle>
 +
<subtitle id='00:13:35'>computer terms is done in a much more</subtitle>
 +
<subtitle id='00:13:40'>restrictive way than biology does it biology generally communicates without</subtitle>
 +
<subtitle id='00:13:44'>wearing who's going to receive I'm going to talk a little bit later about a</subtitle>
 +
<subtitle id='00:13:49'>object-oriented strategy in which messages aren't sent at all they're only</subtitle>
 +
<subtitle id='00:13:54'>received you might think about what an object-oriented system might be like if</subtitle>
 +
<subtitle id='00:13:59'>you never sent a message but objects could receive what would they receive</subtitle>
 +
<subtitle id='00:14:04'>all I could do is receive the translation of this model into machine</subtitle>
 +
<subtitle id='00:14:13'>terms for me 25 years ago or so was that</subtitle>
 +
<subtitle id='00:14:19'>these biological cells acted a lot as though they're on a network you can</subtitle>
 +
<subtitle id='00:14:24'>think of it as a crossbar switch or a</subtitle>
 +
<subtitle id='00:14:28'>Ethernet type network in which every object can send to every other object</subtitle>
 +
<subtitle id='00:14:33'>and each one of these things is a lot like a little computer in fact is very</subtitle>
 +
<subtitle id='00:14:42'>difficult in a good object-oriented system to find out where the hardware</subtitle>
 +
<subtitle id='00:14:47'>stops and the software begins and the</subtitle>
 +
<subtitle id='00:14:52'>this notion of a little computer in the</subtitle>
 +
<subtitle id='00:14:56'>in the large here is something that is worthwhile considering when we think</subtitle>
 +
<subtitle id='00:15:00'>about making very small things now there's a principle in design that</subtitle>
 +
<subtitle id='00:15:07'>people came up with many years ago it's</subtitle>
 +
<subtitle id='00:15:11'>called the basic principle of recursive design and the idea is make the parts</subtitle>
 +
<subtitle id='00:15:16'>have the same power as the whole</subtitle>
 +
<subtitle id='00:15:20'>we know in the factorial example that a</subtitle>
 +
<subtitle id='00:15:25'>recursive program like factorial its</subtitle>
 +
<subtitle id='00:15:29'>charm is it's able to reinvest the</subtitle>
 +
<subtitle id='00:15:33'>conditional branches and so in some sense the program remains as long as</subtitle>
 +
<subtitle id='00:15:39'>that is true the program remains as strong as it was when you entered it</subtitle>
 +
<subtitle id='00:15:43'>because you can always reinter it instead of getting diluted away now</subtitle>
 +
<subtitle id='00:15:49'>another thing that that crossed my mind when I was pondering these ideas back in</subtitle>
 +
<subtitle id='00:15:54'>the 60s was why if that is such a</subtitle>
 +
<subtitle id='00:15:58'>powerful idea why is it that we take a very powerful idea like a computer and</subtitle>
 +
<subtitle id='00:16:04'>dilute it immediately in most programming languages divided by</subtitle>
 +
<subtitle id='00:16:08'>dividing it up into data structures and procedures data structures don't have</subtitle>
 +
<subtitle id='00:16:13'>the same power as a computer they're static can take on marks but they're</subtitle>
 +
<subtitle id='00:16:18'>once once you get a data structure it just sits there procedures don't have</subtitle>
 +
<subtitle id='00:16:24'>the same power as computers because they can't remember state they have to have</subtitle>
 +
<subtitle id='00:16:29'>something additional so what we did in the guise of following standard math</subtitle>
 +
<subtitle id='00:16:34'>mathematical notation in the 50s when Fortran was developed was to mimic</subtitle>
 +
<subtitle id='00:16:40'>standard mathematical notation without thinking about this basic principle of</subtitle>
 +
<subtitle id='00:16:44'>recursive design because people didn't write recursive programs back in the 50s</subtitle>
 +
<subtitle id='00:16:48'>and so the baby is thrown out with the bathwater almost immediately in a</subtitle>
 +
<subtitle id='00:16:52'>standard procedure and data structure language and it occurred to me and other</subtitle>
 +
<subtitle id='00:16:59'>people who are thinking about these ideas back then what if you didn't do</subtitle>
 +
<subtitle id='00:17:04'>that what if the only subdivision you ever made in a programming language was</subtitle>
 +
<subtitle id='00:17:10'>a subdivision of a computer into a computer you're never allowed to</subtitle>
 +
<subtitle id='00:17:15'>subdivide the computer into something that was less than the computer and what</subtitle>
 +
<subtitle id='00:17:19'>does that mean that means that each subdivision has to be something like a</subtitle>
 +
<subtitle id='00:17:23'>black box that has inside of it some</subtitle>
 +
<subtitle id='00:17:27'>mixture of State and process from the</subtitle>
 +
<subtitle id='00:17:31'>outside you can only invoke behavioral attributes</subtitle>
 +
<subtitle id='00:17:36'>rather than invoking method attributes</subtitle>
 +
<subtitle id='00:17:40'>and what I mean by that is this is something that was even in Fortran</subtitle>
 +
<subtitle id='00:17:44'>because the earlier designers of Fortran realized that there is a very funny</subtitle>
 +
<subtitle id='00:17:48'>correspondence between procedural things and data structure things so for</subtitle>
 +
<subtitle id='00:17:52'>instance when you say Si and parentheses</subtitle>
 +
<subtitle id='00:17:56'>30 close parentheses in Fortran you</subtitle>
 +
<subtitle id='00:18:00'>can't tell by looking at that whether you're invoking a function or whether</subtitle>
 +
<subtitle id='00:18:06'>you're accessing an array and that was not accidental back then because of</subtitle>
 +
<subtitle id='00:18:12'>course they thought of arrays as being a kind of a function and they wanted you</subtitle>
 +
<subtitle id='00:18:17'>to be able to write arrays huge tables</subtitle>
 +
<subtitle id='00:18:21'>still done today in order to do</subtitle>
 +
<subtitle id='00:18:25'>functional evaluation very quickly what they didn't realize is that you wanted</subtitle>
 +
<subtitle id='00:18:30'>to be able to trade-off between the two but that notion of just saying sine 30</subtitle>
 +
<subtitle id='00:18:36'>degrees without indicating how its to compete be computed is the essence of</subtitle>
 +
<subtitle id='00:18:41'>the kind of abstraction that that object-oriented programming is all about</subtitle>
 +
<subtitle id='00:18:46'>it's carried very far here by</subtitle>
 +
<subtitle id='00:18:55'>this strong membrane of the object so that what we're dealing with here are</subtitle>
 +
<subtitle id='00:19:00'>behaviors and there are two important</subtitle>
 +
<subtitle id='00:19:04'>implications that had to be worked out early on one of them is that messages in</subtitle>
 +
<subtitle id='00:19:11'>most cases can't be commands or you're</subtitle>
 +
<subtitle id='00:19:16'>violating the notion of the object as being in control now most</subtitle>
 +
<subtitle id='00:19:21'>object-oriented systems today when you do what is called sending a message you</subtitle>
 +
<subtitle id='00:19:26'>are issuing a command Objective C C++</subtitle>
 +
<subtitle id='00:19:30'>even small talk eighty all of those systems a message is actually something</subtitle>
 +
<subtitle id='00:19:38'>very very close to if not identical to a certain kind of procedure call okay but</subtitle>
 +
<subtitle id='00:19:45'>in fact in the original scheme and we can talk about the implications of why</subtitle>
 +
<subtitle id='00:19:49'>this is a good idea later in the original object oriented</subtitle>
 +
<subtitle id='00:19:54'>systems that were so successful messages aren't commands at all what they are are</subtitle>
 +
<subtitle id='00:19:59'>desires I'd like to have this happen just to</subtitle>
 +
<subtitle id='00:20:05'>give you an example of why imagine we have an object masquerading as a</subtitle>
 +
<subtitle id='00:20:10'>critical system file and the question is</subtitle>
 +
<subtitle id='00:20:14'>it should just anybody be able to come up and issue the command to it turn byte</subtitle>
 +
<subtitle id='00:20:20'>5 to 0 now it's done all the time but in</subtitle>
 +
<subtitle id='00:20:25'>fact in an object-oriented system you would like the object to be able to</subtitle>
 +
<subtitle id='00:20:29'>protect itself so that even a person who</subtitle>
 +
<subtitle id='00:20:33'>has a pointer to it even a person who has the knowledge of which command is</subtitle>
 +
<subtitle id='00:20:38'>the right command that both of those do</subtitle>
 +
<subtitle id='00:20:42'>not imply that you have permission to actually change that file so in the when</subtitle>
 +
<subtitle id='00:20:49'>I talk about an object-oriented system I mean an object in which the worst you</subtitle>
 +
<subtitle id='00:20:55'>can do to an object is to simply indicate to it that you would like it to</subtitle>
 +
<subtitle id='00:21:00'>do something for you and the best that can happen is it will do that the worst</subtitle>
 +
<subtitle id='00:21:07'>that can happen to it internally as it will simply refuse it may put you may take your name</subtitle>
 +
<subtitle id='00:21:13'>and give it to the principal later if</subtitle>
 +
<subtitle id='00:21:17'>you've done something wrong but so this notion of absolute control that messages</subtitle>
 +
<subtitle id='00:21:23'>can't be commands and the other one is</subtitle>
 +
<subtitle id='00:21:27'>because the object is no longer a data structure in any sense that we regard it</subtitle>
 +
<subtitle id='00:21:32'>that assignment is something that can't</subtitle>
 +
<subtitle id='00:21:37'>be done from the outside either so the assignment statement has to go away in</subtitle>
 +
<subtitle id='00:21:42'>the form that we know it as an irrevocable change to a variable or a</subtitle>
 +
<subtitle id='00:21:49'>slot in a data structure an assignment has to be changed by something that we</subtitle>
 +
<subtitle id='00:21:53'>can think of as being advice or influence so again this notion of</subtitle>
 +
<subtitle id='00:22:01'>getting an object to to change its state is something that we normally don't do</subtitle>
 +
<subtitle id='00:22:07'>in object-oriented programming because normally in object-oriented programming</subtitle>
 +
<subtitle id='00:22:11'>we are not simply trying to imitate data structures now to be a data structure is</subtitle>
 +
<subtitle id='00:22:17'>that thing that if you send it to</subtitle>
 +
<subtitle id='00:22:21'>somebody else you're giving them permission to change it that's what I</subtitle>
 +
<subtitle id='00:22:25'>mean by a data structure so it's clear that some of the things that we call</subtitle>
 +
<subtitle id='00:22:29'>data structures in normal parlance in a</subtitle>
 +
<subtitle id='00:22:34'>system with an operating system that offers some protection are not strictly</subtitle>
 +
<subtitle id='00:22:39'>classical data structures by that means certain files usually have protections</subtitle>
 +
<subtitle id='00:22:44'>on them so that in a good operating system when we send a file from us to</subtitle>
 +
<subtitle id='00:22:51'>somebody else we are not can conveying to that person</subtitle>
 +
<subtitle id='00:22:55'>the same level of protection necessarily that we have been granted so in a good</subtitle>
 +
<subtitle id='00:23:01'>operating system this is this may be an operating system that you've never seen</subtitle>
 +
<subtitle id='00:23:05'>but there there have been operating systems in the past there exist</subtitle>
 +
<subtitle id='00:23:09'>operating systems now so that if you have a certain set of permissions for a</subtitle>
 +
<subtitle id='00:23:14'>file a and you wish to give it this file</subtitle>
 +
<subtitle id='00:23:19'>to your friend suppose you have the the magic permission to change the any</subtitle>
 +
<subtitle id='00:23:25'>byte in the system file because you're a honcho then you might wonder should I be</subtitle>
 +
<subtitle id='00:23:31'>able to pass on those permissions to the</subtitle>
 +
<subtitle id='00:23:36'>next person that I give this file to the answer to good operating system is no</subtitle>
 +
<subtitle id='00:23:41'>each person should get their own permission separately and when they</subtitle>
 +
<subtitle id='00:23:46'>receive this file a it's their permissions that are granted by the</subtitle>
 +
<subtitle id='00:23:51'>operating system that obtain not the permissions passed on to them by</subtitle>
 +
<subtitle id='00:23:56'>somebody who had the file before so you can think of taking this desperately</subtitle>
 +
<subtitle id='00:24:02'>important file passing it along and when</subtitle>
 +
<subtitle id='00:24:08'>it goes to somebody who is less to be trusted with it they have fewer</subtitle>
 +
<subtitle id='00:24:12'>permissions on that there are fewer things that they can do with it and then</subtitle>
 +
<subtitle id='00:24:16'>they passed it on to somebody again that may go back to a trusted person that</subtitle>
 +
<subtitle id='00:24:21'>person should be able to reintroduce</subtitle>
 +
<subtitle id='00:24:27'>that is called capability protection and</subtitle>
 +
<subtitle id='00:24:31'>capability protection is again another one of these old ideas from the 60s</subtitle>
 +
<subtitle id='00:24:35'>intertwined in a very strong way with</subtitle>
 +
<subtitle id='00:24:40'>object-oriented design that is now coming back capability is simply a</subtitle>
 +
<subtitle id='00:24:45'>technique for protecting objects in a</subtitle>
 +
<subtitle id='00:24:49'>stronger way than normal digital computers allow them to be done and</subtitle>
 +
<subtitle id='00:24:54'>again at the end of the at the towards the end of the talk we'll talk a little</subtitle>
 +
<subtitle id='00:24:58'>bit about this so to me there are lots</subtitle>
 +
<subtitle id='00:25:04'>of different ways of talking about objects but probably 90% of the reason</subtitle>
 +
<subtitle id='00:25:10'>to me for dealing with objects at all has to do with their abilities to</subtitle>
 +
<subtitle id='00:25:15'>protect in various ways protect by</subtitle>
 +
<subtitle id='00:25:20'>encapsulating various kinds of things almost always state less often control</subtitle>
 +
<subtitle id='00:25:27'>is encapsulated and so forth then about</subtitle>
 +
<subtitle id='00:25:31'>10 percent of the use of object-oriented programming to</subtitle>
 +
<subtitle id='00:25:35'>has to do with its ability in whispering</subtitle>
 +
<subtitle id='00:25:39'>to you how you might design a system better and just one more note about that</subtitle>
 +
<subtitle id='00:25:44'>before I get started on the on the talk proper and that is that the way objects</subtitle>
 +
<subtitle id='00:25:52'>are used today is a little bit confusing because they're intertwined with a</subtitle>
 +
<subtitle id='00:25:57'>another set of ideas that came out of the 70s that are very similar</subtitle>
 +
<subtitle id='00:26:03'>particularly in implementation these days and that's what's called data</subtitle>
 +
<subtitle id='00:26:07'>abstraction how many people are familiar with data abstraction as a idea okay so</subtitle>
 +
<subtitle id='00:26:13'>data abstraction looks a lot like object-oriented programming but its</subtitle>
 +
<subtitle id='00:26:17'>intent is different the intent of data abstraction is to take a system that</subtitle>
 +
<subtitle id='00:26:24'>you're familiar with like Pascal or Fortran that is starting to run into</subtitle>
 +
<subtitle id='00:26:30'>difficulties of various kinds difficult is usually a representational ones I</subtitle>
 +
<subtitle id='00:26:36'>think everybody's had the experience programming in a language with data</subtitle>
 +
<subtitle id='00:26:41'>structures you get this big system done you decide you need to change your</subtitle>
 +
<subtitle id='00:26:46'>representation and the next thing you know you're hunting down all of the</subtitle>
 +
<subtitle id='00:26:51'>procedures that think they knew about the old representation and the rule of</subtitle>
 +
<subtitle id='00:26:55'>the universe is that there's always one or two that you don't find so you slide</subtitle>
 +
<subtitle id='00:27:01'>in the new representation and a couple of months later one of those procedures</subtitle>
 +
<subtitle id='00:27:06'>is invoked and all of a sudden you have a crash and people wonder why the answer</subtitle>
 +
<subtitle id='00:27:11'>is the critical knowledge has actually</subtitle>
 +
<subtitle id='00:27:15'>been spread out in such a way that it can't be recovered it's like what you</subtitle>
 +
<subtitle id='00:27:19'>have to do after you do a multiplication in order to recover the the operands you</subtitle>
 +
<subtitle id='00:27:24'>have to do much more work like the difference between differentiation and</subtitle>
 +
<subtitle id='00:27:28'>integration the same thing is true is once you've lost information in a</subtitle>
 +
<subtitle id='00:27:32'>century in a system once the entropy has</subtitle>
 +
<subtitle id='00:27:36'>gone up then it's very hard to get it back so one of the things that you try</subtitle>
 +
<subtitle id='00:27:42'>and do with objects is to try and maintain the</subtitle>
 +
<subtitle id='00:27:46'>as much informational content as you possibly can in a smaller place as possible now data</subtitle>
 +
<subtitle id='00:27:52'>abstraction techniques use a similar way of wrapping an envelope around a data</subtitle>
 +
<subtitle id='00:27:59'>structure and invoke operations by means of procedures in order to try and get it</subtitle>
 +
<subtitle id='00:28:07'>to be a little bit more representation independent the difference though ADA</subtitle>
 +
<subtitle id='00:28:12'>for instance is a language that is a data abstraction language is not an</subtitle>
 +
<subtitle id='00:28:18'>object-oriented language and even the the people who actually understand ADA</subtitle>
 +
<subtitle id='00:28:22'>don't claim that but you can do certain kinds of things that are now today</subtitle>
 +
<subtitle id='00:28:27'>called object-oriented in Ada so this</subtitle>
 +
<subtitle id='00:28:32'>envelope of procedures is wrapped around the data structure in an effort to</subtitle>
 +
<subtitle id='00:28:37'>protect it but then what happens is that this new structure that's been created</subtitle>
 +
<subtitle id='00:28:42'>is then treated as a data structure by all the rest of the program the result</subtitle>
 +
<subtitle id='00:28:48'>is in particularly in ada is that the</subtitle>
 +
<subtitle id='00:28:53'>programs are not small the programs aren't any smaller than they were before</subtitle>
 +
<subtitle id='00:28:59'>and one of the hallmarks of object-oriented programming if you have any sense of whether you're doing it</subtitle>
 +
<subtitle id='00:29:05'>right or not is that the programs are remarkably smaller because there's a way</subtitle>
 +
<subtitle id='00:29:11'>of using the design that is not simply</subtitle>
 +
<subtitle id='00:29:15'>imitating a bad old idea which is data structures and trying to shore it up by</subtitle>
 +
<subtitle id='00:29:20'>putting it in an orthotic brace but in fact to go beyond the notion of data</subtitle>
 +
<subtitle id='00:29:25'>structures so for instance in in a NATO way of of doing object-oriented</subtitle>
 +
<subtitle id='00:29:30'>programming one typically comes out with</subtitle>
 +
<subtitle id='00:29:35'>something that looks very much like a data structure it has fields that are to</subtitle>
 +
<subtitle id='00:29:39'>be written to it has fields that data is to be taken out of the structure is</subtitle>
 +
<subtitle id='00:29:45'>static there's no actual process going on and it's essentially a slightly more</subtitle>
 +
<subtitle id='00:29:52'>abstract way of doing data typically in an object a good object will not</subtitle>
 +
<subtitle id='00:29:57'>actually permit you to write assignment statements to it at</subtitle>
 +
<subtitle id='00:30:02'>all because an object generally will not</subtitle>
 +
<subtitle id='00:30:07'>look at all like a data structure just to give you an example we can contrast a</subtitle>
 +
<subtitle id='00:30:12'>personnel record as it might be done in</subtitle>
 +
<subtitle id='00:30:16'>Ada in which we still wind up with fields as we had them before some of the</subtitle>
 +
<subtitle id='00:30:23'>fields might be a little bit more connected but it's still a large thing</subtitle>
 +
<subtitle id='00:30:27'>it's still passed around as a passive object we could contrast that with an</subtitle>
 +
<subtitle id='00:30:32'>object-oriented approach with which would be to try and turn the personnel record into something much more like the</subtitle>
 +
<subtitle id='00:30:38'>like a real person in other words this personnel record instead of sitting</subtitle>
 +
<subtitle id='00:30:45'>there on a file waiting to be manipulated would actually be trying to participate actively in some sort of</subtitle>
 +
<subtitle id='00:30:51'>simulation instead of changing the person's age from the outside the way</subtitle>
 +
<subtitle id='00:30:58'>you might do in a data record the age of the person would change dynamically as</subtitle>
 +
<subtitle id='00:31:03'>the birthday was passed because there was something in this object that was</subtitle>
 +
<subtitle id='00:31:07'>actively looking at the clock actively running in some sense the notion of</subtitle>
 +
<subtitle id='00:31:14'>being able to edit the object from the outside would be much less in the sense</subtitle>
 +
<subtitle id='00:31:19'>of editing the actual fields so objects even in a in a programming language in</subtitle>
 +
<subtitle id='00:31:25'>which everything is an object like small talk objects tend to be larger things</subtitle>
 +
<subtitle id='00:31:30'>than data structures they tend to be</subtitle>
 +
<subtitle id='00:31:34'>components active machines that fit</subtitle>
 +
<subtitle id='00:31:39'>together with other active machines to make a new kind of structure just to</subtitle>
 +
<subtitle id='00:31:43'>give you an example of a modern attempt</subtitle>
 +
<subtitle id='00:31:47'>at large scale object-oriented programming which hasn't been done very</subtitle>
 +
<subtitle id='00:31:51'>much for a long time the largest object-oriented system was small talk</subtitle>
 +
<subtitle id='00:31:55'>zone system which was even though it had</subtitle>
 +
<subtitle id='00:32:00'>its own user interface and its own operating system and its own sets of</subtitle>
 +
<subtitle id='00:32:07'>editors and facilities and file system</subtitle>
 +
<subtitle id='00:32:11'>and every other kind of thing the small talk ad system that is distributed by park play systems</subtitle>
 +
<subtitle id='00:32:15'>for instance is only about 40,000 lines of code which to me is is 10</subtitle>
 +
<subtitle id='00:32:22'>approximately 4 to 10 times as large as it actually needs to be it's actually</subtitle>
 +
<subtitle id='00:32:27'>kind of junky in various ways but when</subtitle>
 +
<subtitle id='00:32:32'>you consider that the UNIX kernel it's alone is 400,000 lines of C and that is</subtitle>
 +
<subtitle id='00:32:37'>thought to be a rather small kernel in the operating system domain you can see</subtitle>
 +
<subtitle id='00:32:41'>that most object-oriented programming historically the programs have been tiny</subtitle>
 +
<subtitle id='00:32:48'>the all of the stuff that we did at Parc that led to the Macintosh could be</subtitle>
 +
<subtitle id='00:32:54'>summed up this includes the equivalent of about 15 different Macintosh</subtitle>
 +
<subtitle id='00:32:58'>applications including mac draw and mac paint and all of those things were</subtitle>
 +
<subtitle id='00:33:03'>summed up by approximately 175 pages of</subtitle>
 +
<subtitle id='00:33:08'>code or approximately 8,000 lines of</subtitle>
 +
<subtitle id='00:33:13'>code that included the operating system the user interface and everything these</subtitle>
 +
<subtitle id='00:33:18'>programs are tiny when they're done right because of that people have been</subtitle>
 +
<subtitle id='00:33:23'>very suspicious of them in the world for instance that you come from you know</subtitle>
 +
<subtitle id='00:33:28'>does this idea really scale is it just for toy problems and so forth the most</subtitle>
 +
<subtitle id='00:33:34'>recent example of object-oriented programming in the large that I know has</subtitle>
 +
<subtitle id='00:33:39'>one done by Arthur Anderson consulting at the Brooklyn Union gas company over</subtitle>
 +
<subtitle id='00:33:44'>the last year now Arthur Anderson I don't know how large the jobs typically</subtitle>
 +
<subtitle id='00:33:49'>are at McDonnell Douglas but Arthur Andersen consulting typically and I</subtitle>
 +
<subtitle id='00:33:55'>think they do some work for McDonnell Douglas but typically when they get to</subtitle>
 +
<subtitle id='00:34:00'>work on a job their clients have already failed a couple of times and implementing it they're usually called</subtitle>
 +
<subtitle id='00:34:06'>in at the last moment they charge twenty</subtitle>
 +
<subtitle id='00:34:11'>to fifty million dollars a pop for one</subtitle>
 +
<subtitle id='00:34:15'>of these jobs and their jobs typically run to about one and a half million to</subtitle>
 +
<subtitle id='00:34:19'>two million lines of COBOL this this is</subtitle>
 +
<subtitle id='00:34:23'>done over a period of about a year and a half to two years by a highly trained group of</subtitle>
 +
<subtitle id='00:34:28'>people I think of as technological Marines they have a very rigorous</subtitle>
 +
<subtitle id='00:34:37'>high-spirited training facility called st. Charles they have a approximately</subtitle>
 +
<subtitle id='00:34:41'>27,000 people who do this kind of work</subtitle>
 +
<subtitle id='00:34:45'>and it's a fascinating fascinating set up I'm on their technical advisory board</subtitle>
 +
<subtitle id='00:34:49'>and I got on the board partly just because I was interested in the culture</subtitle>
 +
<subtitle id='00:34:53'>of this particular company I was really surprised that given how successful</subtitle>
 +
<subtitle id='00:34:58'>they've been that they have been shifting their entire set of operations</subtitle>
 +
<subtitle id='00:35:03'>over to objects over the last five years or so it's an enormous change for them</subtitle>
 +
<subtitle id='00:35:08'>because they have it's not the change in</subtitle>
 +
<subtitle id='00:35:12'>going from a non object-oriented language to an object-oriented language the change of going from one kind of</subtitle>
 +
<subtitle id='00:35:18'>culture to another kind of culture it's a change that as Koon mentioned about</subtitle>
 +
<subtitle id='00:35:22'>paradigms the reason the paradigm shifts take 25 years or more in science is in</subtitle>
 +
<subtitle id='00:35:28'>order to have a paradigm shift in science you generally have to let the old physicists die off once once people</subtitle>
 +
<subtitle id='00:35:35'>have learned a technique and have gotten comfortable with it is extremely</subtitle>
 +
<subtitle id='00:35:39'>difficult for them to go to something else the Macintosh user interface in its</subtitle>
 +
<subtitle id='00:35:43'>early stages had that difficult people had gotten so good with function keys</subtitle>
 +
<subtitle id='00:35:48'>that they actually felt diminished by</subtitle>
 +
<subtitle id='00:35:53'>using the mouse even after was shown to them that the mouse is four times more</subtitle>
 +
<subtitle id='00:35:58'>efficient in speed over what they've been doing with the function keys it</subtitle>
 +
<subtitle id='00:36:03'>didn't seem that way to them because they've gotten so adroit with it and the</subtitle>
 +
<subtitle id='00:36:07'>same thing is true with any technique that people use so Arthur Andersen has</subtitle>
 +
<subtitle id='00:36:12'>done a number of different pilot projects but last year they started the</subtitle>
 +
<subtitle id='00:36:17'>first large implementation this is a project that was a reimplementation of a</subtitle>
 +
<subtitle id='00:36:24'>system that had been done some years ago and it was originally designed to be</subtitle>
 +
<subtitle id='00:36:29'>done in the standard Arthur Anderson case tools and the estimate was 1.7</subtitle>
 +
<subtitle id='00:36:35'>million lines of COBOL and approximately 2 to</subtitle>
 +
<subtitle id='00:36:39'>two and a half years of implementation time to do this enormous system which is</subtitle>
 +
<subtitle id='00:36:44'>both both an accounting system and a management information system and as an</subtitle>
 +
<subtitle id='00:36:50'>experiment they decided to left a New York group which had been the pioneers</subtitle>
 +
<subtitle id='00:36:54'>in object-oriented programming do a</subtitle>
 +
<subtitle id='00:36:58'>implementation using object-oriented techniques now of course they didn't</subtitle>
 +
<subtitle id='00:37:02'>have an object-oriented language to work with for their end result this was to be</subtitle>
 +
<subtitle id='00:37:07'>done on IBM mainframes 30 90s there are</subtitle>
 +
<subtitle id='00:37:12'>no object-oriented languages extant on</subtitle>
 +
<subtitle id='00:37:18'>the 30 90 so they did a trial implementation to test out the design in</subtitle>
 +
<subtitle id='00:37:24'>small talk taking a few months to do it and then wrote a set of library routines</subtitle>
 +
<subtitle id='00:37:31'>and some pre-processing macros for PL 1 and then we implemented this project</subtitle>
 +
<subtitle id='00:37:39'>with about 10 programmers in PL 1 so the</subtitle>
 +
<subtitle id='00:37:43'>results of that are now in the minor</subtitle>
 +
<subtitle id='00:37:47'>interesting thing was that they got done about 6 months early the major</subtitle>
 +
<subtitle id='00:37:53'>interesting thing was that the amount of code that actually had to be written to</subtitle>
 +
<subtitle id='00:37:57'>do this Amandla to 150,000 lines of this</subtitle>
 +
<subtitle id='00:38:01'>library is PL 1 as opposed to the 1.7</subtitle>
 +
<subtitle id='00:38:05'>million lines of COBOL that their estimates had done before so this is a</subtitle>
 +
<subtitle id='00:38:11'>factor of 11 less code and from their standpoint the six months was down in</subtitle>
 +
<subtitle id='00:38:16'>the noise because the the months that they're interested in are the 5 or 6</subtitle>
 +
<subtitle id='00:38:21'>years of maintaining the code from then on and being able to reuse those modules</subtitle>
 +
<subtitle id='00:38:27'>as they are going to be able to on other 3090 implementation so in some sense the</subtitle>
 +
<subtitle id='00:38:34'>the fact that you can program faster that you're you can save time and so</subtitle>
 +
<subtitle id='00:38:40'>forth in object-oriented programming in in the larger world is not nearly as</subtitle>
 +
<subtitle id='00:38:45'>interesting it as it is in research and research basically the ability to do</subtitle>
 +
<subtitle id='00:38:49'>quick prototyping dominates almost everything else</subtitle>
 +
<subtitle id='00:38:53'>in the large world the world that you come from the world that Arthur Andersen</subtitle>
 +
<subtitle id='00:38:57'>is in quick prototyping is something they'd like to do they're starting to do it but it's not nearly as important as</subtitle>
 +
<subtitle id='00:39:02'>maintainability reusability is the</subtitle>
 +
<subtitle id='00:39:07'>second thing if they can reuse a module as a component in some other system then</subtitle>
 +
<subtitle id='00:39:14'>they have saved themselves an enormous amount not of time although they have</subtitle>
 +
<subtitle id='00:39:21'>certainly done that but to them it's not time but it's designer skills the thing</subtitle>
 +
<subtitle id='00:39:28'>that all large companies are weak on is having enough designers to go around</subtitle>
 +
<subtitle id='00:39:33'>they're usually plenty of people to write code but the designers are few and</subtitle>
 +
<subtitle id='00:39:38'>far between and this notion that a successful design can actually be moved</subtitle>
 +
<subtitle id='00:39:43'>from one place to another in components is something that literally drives the</subtitle>
 +
<subtitle id='00:39:48'>Arthur Andersen people crazy with joy to to think about so they have now come up</subtitle>
 +
<subtitle id='00:39:52'>with an object-oriented repository and are starting to craft rather large</subtitle>
 +
<subtitle id='00:39:59'>useful objects that can be used as standard components and building blocks</subtitle>
 +
<subtitle id='00:40:03'>in various systems and we'll talk a little bit later about how one goes</subtitle>
 +
<subtitle id='00:40:07'>about to me this is what object-oriented programming is about it's not saving</subtitle>
 +
<subtitle id='00:40:13'>data structures from itself it's not making a slightly fancier data structure</subtitle>
 +
<subtitle id='00:40:18'>it's not even making a data structure that can implement certain kinds of constraints within itself and so forth</subtitle>
 +
<subtitle id='00:40:24'>it's thinking of those objects as independent machines going back to this</subtitle>
 +
<subtitle id='00:40:30'>whole biological notion that it's one thing to build cells and it's another</subtitle>
 +
<subtitle id='00:40:35'>thing to build tissues and for people</subtitle>
 +
<subtitle id='00:40:40'>who are just starting out in object-oriented programming they're usually thrilled that they can build cells but the real goal is to be had</subtitle>
 +
<subtitle id='00:40:46'>when you move from cells to thinking about what are the tissues what are the</subtitle>
 +
<subtitle id='00:40:50'>conglomerations of these atomic style objects into components that if you were</subtitle>
 +
<subtitle id='00:40:57'>to have three or four hundred of them in a repository usable by any programmer</subtitle>
 +
<subtitle id='00:41:04'>what would you be able to build could you be able to Tinkertoy things</subtitle>
 +
<subtitle id='00:41:08'>together could end-user programmers be</subtitle>
 +
<subtitle id='00:41:12'>able to do a considerable amount of the programming and retailer and so forth so</subtitle>
 +
<subtitle id='00:41:18'>the real change if there is one I think</subtitle>
 +
<subtitle id='00:41:22'>I think it's coming faster than we think that object-oriented programming is</subtitle>
 +
<subtitle id='00:41:26'>going to bring along is actually both a change in the way professional</subtitle>
 +
<subtitle id='00:41:31'>programmers do their work but even more so a change in the way these</subtitle>
 +
<subtitle id='00:41:35'>applications are designed another example for instance at Apple now we</subtitle>
 +
<subtitle id='00:41:40'>design all of the applications that we do as though they are going to be</subtitle>
 +
<subtitle id='00:41:46'>actually tailored not completed but</subtitle>
 +
<subtitle id='00:41:50'>tailored by an end-user a person who has</subtitle>
 +
<subtitle id='00:41:55'>programmed almost not at all person who's used HyperCard a few times</subtitle>
 +
<subtitle id='00:41:59'>so this is a really big change and it's</subtitle>
 +
<subtitle id='00:42:03'>something that has been talked about for 20 years or more but it's something that</subtitle>
 +
<subtitle id='00:42:08'>just now is possible to actually do what does it mean well it means what you'd</subtitle>
 +
<subtitle id='00:42:13'>like when you get an application from somebody is to be able to use it right</subtitle>
 +
<subtitle id='00:42:19'>out of the box read them the manual understand what it is don't have to sit</subtitle>
 +
<subtitle id='00:42:27'>down and think about it as a kit or anything but just use it the way you're used to using it now it's a temporary</subtitle>
 +
<subtitle id='00:42:32'>solution to some set of problems you have right now also you wouldn't be using it but a month later your old</subtitle>
 +
<subtitle id='00:42:39'>attitude about this ad this application has changed completely month later now</subtitle>
 +
<subtitle id='00:42:44'>you're saying boy I wish this thing could do this and I wish this thing could do this everybody does that person</subtitle>
 +
<subtitle id='00:42:50'>who's never program before is only used the computer for a couple of weeks after</subtitle>
 +
<subtitle id='00:42:55'>a couple of weeks they'll say boy I wish this thing could do this and I wish it could do that and that's the point where</subtitle>
 +
<subtitle id='00:43:00'>you'd like to hit the hood latch button on the application and open it up and</subtitle>
 +
<subtitle id='00:43:05'>see something in there that was comprehensible right now if you open an</subtitle>
 +
<subtitle id='00:43:10'>application on the Macintosh you open it up it's sort of like looking into the</subtitle>
 +
<subtitle id='00:43:14'>hood of a Mercedes Benz or something there's this mass of tubing and if the</subtitle>
 +
<subtitle id='00:43:19'>thing had a carburetor you find it because it's a mass of spaghetti</subtitle>
 +
<subtitle id='00:43:23'>mostly machine code on desktop micros but doesn't matter whether it's machine</subtitle>
 +
<subtitle id='00:43:28'>code or Fortran it's a mess and on the</subtitle>
 +
<subtitle id='00:43:33'>other hand what the user wants to see when they open it up is something that looks like a Model T they want to see a</subtitle>
 +
<subtitle id='00:43:39'>schematic even if there's a Ferrari underneath the Model T they want to see</subtitle>
 +
<subtitle id='00:43:44'>a Model T they want to see a schematic engine of what makes that application</subtitle>
 +
<subtitle id='00:43:51'>tick because they've already got an intuitive notion about how that works and then they would like to be able to</subtitle>
 +
<subtitle id='00:43:56'>make changes at the level of that schematic engine there are a bunch of</subtitle>
 +
<subtitle id='00:44:01'>applications you can buy for the Macintosh now in which that's possible</subtitle>
 +
<subtitle id='00:44:05'>an example is focal point and most many</subtitle>
 +
<subtitle id='00:44:09'>other applications written in hyper card because hypercard is a an object-oriented language set up so that</subtitle>
 +
<subtitle id='00:44:16'>professional applications programmers can give you not just architectures not</subtitle>
 +
<subtitle id='00:44:21'>just a kit but working architectures working kids and then after you've used</subtitle>
 +
<subtitle id='00:44:26'>them for several months you can make the change that's going to change the whole</subtitle>
 +
<subtitle id='00:44:30'>way we go about designing things professional programmers won't be</subtitle>
 +
<subtitle id='00:44:34'>designing programs for each other or F at its worst professional programmers</subtitle>
 +
<subtitle id='00:44:39'>tend to design programs that will keep them in job security there's a class of</subtitle>
 +
<subtitle id='00:44:46'>programmer who delights in the obscure they love the fact that they are the</subtitle>
 +
<subtitle id='00:44:50'>only ones that can understand how this program works and there's a maxim that</subtitle>
 +
<subtitle id='00:44:55'>says if you're the only one who understands how it works you don't understand how it works and so progress</subtitle>
 +
<subtitle id='00:45:02'>is isn't to be made there so so I think</subtitle>
 +
<subtitle id='00:45:06'>I'm going to go into the the give you an</subtitle>
 +
<subtitle id='00:45:11'>idea about where some of these ideas came from the one thing I think you may</subtitle>
 +
<subtitle id='00:45:15'>be a little bit surprised to add is some of the earliest object-oriented ideas</subtitle>
 +
<subtitle id='00:45:19'>were some of the most sophisticated and it will be revisiting them in the next</subtitle>
 +
<subtitle id='00:45:24'>five and ten years to come one of the reasons for this is that because you</subtitle>
 +
<subtitle id='00:45:29'>couldn't make money in computing in the 60s many of the people who</subtitle>
 +
<subtitle id='00:45:34'>had ideas about how computing should be done in the 60s had extremely pure</subtitle>
 +
<subtitle id='00:45:38'>conceptions those conceptions are</subtitle>
 +
<subtitle id='00:45:42'>powerful yet today and it's worthwhile showing you a few of them</subtitle>
 +
<subtitle id='00:46:01'>so just just as a reference point</subtitle>
 +
<subtitle id='00:46:09'>I like I always like to start off with this slide because this is my vote for</subtitle>
 +
<subtitle id='00:46:18'>the world's first personal computer this</subtitle>
 +
<subtitle id='00:46:23'>picture was taken at Lincoln labs in 1962 summer of 1962 and this is a</subtitle>
 +
<subtitle id='00:46:29'>machine called the link and it's</subtitle>
 +
<subtitle id='00:46:33'>especially appropriate to mention here since the person who invented this machine West Clarke had a research</subtitle>
 +
<subtitle id='00:46:38'>project at Washington University for many years</subtitle>
 +
<subtitle id='00:46:43'>sponsored by ARPA those things that look like Dec tapes over on the side he</subtitle>
 +
<subtitle id='00:46:48'>actually invented they were called link type tapes originally and this is kind</subtitle>
 +
<subtitle id='00:46:53'>of a metaphor for our talk which is the</subtitle>
 +
<subtitle id='00:46:59'>best that Dec could do with these ideas that came out of Lincoln labs as well</subtitle>
 +
<subtitle id='00:47:04'>when Dec saw this machine in the early 60s it said boy what a great way of</subtitle>
 +
<subtitle id='00:47:08'>making a small mainframe and it immediately adapted the the architecture</subtitle>
 +
<subtitle id='00:47:15'>of the link to make many computers but Dec said well people aren't used to</subtitle>
 +
<subtitle id='00:47:21'>looking at displays let's make that an option so he took the display away and</subtitle>
 +
<subtitle id='00:47:27'>people didn't understand what was</subtitle>
 +
<subtitle id='00:47:32'>actually on the link tapes some obscure stuff so they said well let's put files</subtitle>
 +
<subtitle id='00:47:37'>on the link tape so I'll call him Dec tapes and out of this machine Dec was</subtitle>
 +
<subtitle id='00:47:44'>able to come up with the astounding idea of the mini computer whereas in fact about 2,000 of these were built in the</subtitle>
 +
<subtitle id='00:47:51'>60s and an astounding as far as I've been able to determine is an astounding</subtitle>
 +
<subtitle id='00:47:55'>900 of them seemed to be still working today now they were designed for</subtitle>
 +
<subtitle id='00:48:02'>biomedical labs for technicians who</subtitle>
 +
<subtitle id='00:48:07'>needed to do their own programming and needed to do real-time experiments and</subtitle>
 +
<subtitle id='00:48:11'>it was an almost perfect machine by the way what was on those original link</subtitle>
 +
<subtitle id='00:48:16'>tapes what was on there were the pages of the virtual memory this first personal computer</subtitle>
 +
<subtitle id='00:48:21'>had it's very hard to go out today and</subtitle>
 +
<subtitle id='00:48:25'>buy a personal computer that has a real</subtitle>
 +
<subtitle id='00:48:30'>virtual memory this machine had it back in 1962 so as an excellent idea but like</subtitle>
 +
<subtitle id='00:48:36'>many things thought of it it actually</subtitle>
 +
<subtitle id='00:48:40'>was so far ahead of its time that it took another decade or so for people to</subtitle>
 +
<subtitle id='00:48:44'>catch up to it</subtitle>
 +
<subtitle id='00:48:48'>one of the very first object-oriented software systems and one that's I think</subtitle>
 +
<subtitle id='00:48:52'>a particularly in this talk is Ivan Sutherland sketchpad which is also done</subtitle>
 +
<subtitle id='00:48:58'>at Lincoln labs on the tx2 computer which was the last computer in America</subtitle>
 +
<subtitle id='00:49:04'>large enough to have its own roof and in fact was it was about four times the</subtitle>
 +
<subtitle id='00:49:10'>size of this room and every Thursday they would take it down and change about</subtitle>
 +
<subtitle id='00:49:16'>10% of it because they were always</subtitle>
 +
<subtitle id='00:49:20'>putting new things it had some of the earliest core memory ever devised and</subtitle>
 +
<subtitle id='00:49:25'>it's quite a remarkable machine for its day it was used as a single user machine</subtitle>
 +
<subtitle id='00:49:29'>by Ivan Sutherland to invent sketchpad</subtitle>
 +
<subtitle id='00:49:33'>and you see him here he's working with a</subtitle>
 +
<subtitle id='00:49:37'>bridge truss sketchpad is very difficult to appreciate and just by looking at</subtitle>
 +
<subtitle id='00:49:44'>slides so I thought I would show you a videotape of it in operation so if we</subtitle>
 +
<subtitle id='00:49:48'>could run the first videotape take a</subtitle>
 +
<subtitle id='00:49:54'>look and see what this again is the summer of 62 is tape number one stop</subtitle>
 +
<subtitle id='00:50:08'>could you we I thought that was rewound could you rewind that please</subtitle>
 +
<subtitle id='00:50:20'>and then show it</subtitle>
 +
<subtitle id='00:51:02'>now back then they didn't really have computer displays as we know them today</subtitle>
 +
<subtitle id='00:51:06'>so that tx2 here is actually simulating the lines by drawing dots rubber band</subtitle>
 +
<subtitle id='00:51:13'>technique that you've seen before now here's something that I even invented which is he's pointing at the edges and</subtitle>
 +
<subtitle id='00:51:19'>telling sketchpad he wants them all to be mutually perpendicular and sketchpad</subtitle>
 +
<subtitle id='00:51:25'>just solved that problem we see the sketch pad is the first system to have a</subtitle>
 +
<subtitle id='00:51:29'>window the virtual paper he's drawing on</subtitle>
 +
<subtitle id='00:51:34'>is about a third of a mile on a side</subtitle>
 +
<subtitle id='00:51:38'>here the constraint was make the lines parallel now the constraint is</subtitle>
 +
<subtitle id='00:51:43'>collinearity so sketch pad wasn't just</subtitle>
 +
<subtitle id='00:51:48'>the first graphic system was also the first non procedural programming system</subtitle>
 +
<subtitle id='00:51:56'>so everything is controlled by non</subtitle>
 +
<subtitle id='00:52:01'>procedurally giving goals that the system has to figure out here he's</subtitle>
 +
<subtitle id='00:52:05'>making the guidelines invisible to get some dashed lines</subtitle>
 +
<subtitle id='00:52:16'>so he's made himself a flange now he wants to make a rivet and this is why it</subtitle>
 +
<subtitle id='00:52:21'>was called a sketchpad that you didn't</subtitle>
 +
<subtitle id='00:52:25'>want to have to be precise he wanted to be able to just sort of sketch things</subtitle>
 +
<subtitle id='00:52:29'>he's gonna use that as the center for an arc and now he's going to again point to</subtitle>
 +
<subtitle id='00:52:39'>those and say make them mutually perpendicular that pulls the center</subtitle>
 +
<subtitle id='00:52:43'>which pulls the arc which makes it symmetric which makes the rivet because</subtitle>
 +
<subtitle id='00:52:48'>of the way that program is implemented you can actually see it solve the</subtitle>
 +
<subtitle id='00:52:52'>problem there's actually quite</subtitle>
 +
<subtitle id='00:52:58'>sophisticated this is a nonlinear problem that's actually solving</subtitle>
 +
<subtitle id='00:53:12'>so no matter how he distorts it it comes up with the same general shape and he</subtitle>
 +
<subtitle id='00:53:16'>could constrain the ratios of the lengths if he wanted to now what he's</subtitle>
 +
<subtitle id='00:53:23'>been working on there was actually what we today would call a class he called it a master and this is an instance of that</subtitle>
 +
<subtitle id='00:53:31'>Rivet can make it larger or smaller</subtitle>
 +
<subtitle id='00:53:45'>so he wants to latch it into the flange here you can see that this program</subtitle>
 +
<subtitle id='00:53:52'>rapidly led to better display designs</subtitle>
 +
<subtitle id='00:53:59'>these are other instances of the rivet and now he goes back to the master and</subtitle>
 +
<subtitle id='00:54:07'>says well let's make those guidelines invisible so it looks more like a rivet and we see that the instances</subtitle>
 +
<subtitle id='00:54:12'>dynamically feel that change so these</subtitle>
 +
<subtitle id='00:54:16'>are not copies but actually dynamic instances</subtitle>
 +
<subtitle id='00:54:34'>okay and now he shows that any constructed thing can be a master so he</subtitle>
 +
<subtitle id='00:54:41'>had made the plan for the rivet into a master now he's pulling instances from it and rotating them and changing them</subtitle>
 +
<subtitle id='00:54:47'>and so forth</subtitle>
 +
<subtitle id='00:54:58'>okay if you stop that tape please so</subtitle>
 +
<subtitle id='00:55:03'>sketchpad even today is an amazing program you can't buy a graphics system</subtitle>
 +
<subtitle id='00:55:09'>that is nearly as as good today in the</subtitle>
 +
<subtitle id='00:55:14'>sense of it being a comprehensive system for allowing you to set up problems</subtitle>
 +
<subtitle id='00:55:23'>allowing you to solve problems its implementation not just its appearance</subtitle>
 +
<subtitle id='00:55:28'>was also object oriented and the style</subtitle>
 +
<subtitle id='00:55:33'>was something that Ivan settlin came up pretty much on his own because of the</subtitle>
 +
<subtitle id='00:55:39'>difficulty in dealing with many different kinds of objects and having</subtitle>
 +
<subtitle id='00:55:44'>them solve constraints and being able to make pictures for them of themselves and</subtitle>
 +
<subtitle id='00:55:49'>so forth so he got interested in this idea that each object could actually</subtitle>
 +
<subtitle id='00:55:53'>have its own drawing procedure embedded in it and all you had to do is be able</subtitle>
 +
<subtitle id='00:55:59'>to send the message draw to any of the objects and it would invoke the correct</subtitle>
 +
<subtitle id='00:56:04'>procedure although would be a different procedure each time and the same notions</subtitle>
 +
<subtitle id='00:56:08'>were later used for constraints now I</subtitle>
 +
<subtitle id='00:56:13'>once I asked to Ivan I said Ivan how how</subtitle>
 +
<subtitle id='00:56:17'>is it possible for you to in one year just by yourself come up with the</subtitle>
 +
<subtitle id='00:56:22'>world's first graphics system the first non procedural programming system and</subtitle>
 +
<subtitle id='00:56:27'>the first object-oriented software system and he said to me well I didn't</subtitle>
 +
<subtitle id='00:56:31'>know it was hard</subtitle>
 +
<subtitle id='00:56:35'>fortunately didn't and actually it has it has barely been improved on since</subtitle>
 +
<subtitle id='00:56:39'>there have been some improvements since the system called thing lab done at park</subtitle>
 +
<subtitle id='00:56:45'>about a decade ago or so was an improvement on it this whole area of</subtitle>
 +
<subtitle id='00:56:51'>constraint driven object-oriented</subtitle>
 +
<subtitle id='00:56:55'>programming is something that is a hot topic in research right now and I think</subtitle>
 +
<subtitle id='00:56:59'>for the first time in twenty years is actually going to yield some fruit over</subtitle>
 +
<subtitle id='00:57:03'>the next five to ten years the reason is is that people who do mechanical design</subtitle>
 +
<subtitle id='00:57:10'>particularly such as you do here at McDonnell Douglas require now for the</subtitle>
 +
<subtitle id='00:57:17'>first time serious simulation of the</subtitle>
 +
<subtitle id='00:57:21'>mechanical design particularly how it articulates with other parts of the</subtitle>
 +
<subtitle id='00:57:25'>design really want to have a simulation job-shop built into the design system so</subtitle>
 +
<subtitle id='00:57:32'>you can do a lot more than just finite element analysis but be able to do</subtitle>
 +
<subtitle id='00:57:37'>analysis of linkages and other kinds of situations that are too difficult to do</subtitle>
 +
<subtitle id='00:57:44'>simple in analytic solutions or do finite element analysis and the answer</subtitle>
 +
<subtitle id='00:57:49'>to this is a kind of constraint driven object-oriented design the sketchpad</subtitle>
 +
<subtitle id='00:57:55'>actually invented the first kind of so let me give you another example I'm</subtitle>
 +
<subtitle id='00:57:59'>going to go to the number four tape this</subtitle>
 +
<subtitle id='00:58:04'>time though</subtitle>
 +
<subtitle id='00:58:13'>okay okay I'll pause well had some</subtitle>
 +
<subtitle id='00:58:29'>interesting questions actually one of</subtitle>
 +
<subtitle id='00:58:36'>the things I should have mentioned at the beginning is I'm perfectly happy to entertain questions that at any point I</subtitle>
 +
<subtitle id='00:58:42'>believe that the the we have an hour and</subtitle>
 +
<subtitle id='00:58:47'>a half that the at least an hour of the</subtitle>
 +
<subtitle id='00:58:54'>hour and a half I think we should spend talking about issues that concern all of</subtitle>
 +
<subtitle id='00:59:01'>us about object-oriented programming I have some of my own people who are</subtitle>
 +
<subtitle id='00:59:06'>starting out on it may have some crap you the trepidation they may wonder</subtitle>
 +
<subtitle id='00:59:11'>where it's going what the actual leverage is I had a a question asked</subtitle>
 +
<subtitle id='00:59:19'>again about the difference between abstract data structures and what I</subtitle>
 +
<subtitle id='00:59:24'>think of as a real object-oriented style another question was asked about is</subtitle>
 +
<subtitle id='00:59:29'>there any way of preserving already written COBOL and Fortran code in an</subtitle>
 +
<subtitle id='00:59:34'>object-oriented fashion so it doesn't</subtitle>
 +
<subtitle id='00:59:38'>all have to be thrown away and maybe</subtitle>
 +
<subtitle id='00:59:43'>that last question is one that's worth while answering now a lot of companies</subtitle>
 +
<subtitle id='00:59:50'>are trying to figure out what to do</subtitle>
 +
<subtitle id='00:59:55'>about object-oriented programming particularly given that there don't</subtitle>
 +
<subtitle id='01:00:01'>exist any good object-oriented programming languages for programming in</subtitle>
 +
<subtitle id='01:00:05'>the large small talk is not a good</subtitle>
 +
<subtitle id='01:00:09'>language for programming in the large as it's currently distributed it's a great</subtitle>
 +
<subtitle id='01:00:14'>language for learning about object-oriented programming because it's</subtitle>
 +
<subtitle id='01:00:19'>written entirely in itself and so you can learn how an operating system how a</subtitle>
 +
<subtitle id='01:00:25'>user interface how applications how little things and</subtitle>
 +
<subtitle id='01:00:31'>larger things can be represented in an object-oriented form how inheritance</subtitle>
 +
<subtitle id='01:00:37'>subclassing and so forth all those things small talk is ideal the of the</subtitle>
 +
<subtitle id='01:00:43'>small talks around to look at the one</subtitle>
 +
<subtitle id='01:00:47'>that has the best manual is the one called small talk V and it runs on both</subtitle>
 +
<subtitle id='01:00:53'>the IBM PC and the Macintosh it's not</subtitle>
 +
<subtitle id='01:00:59'>the mote it's it's a rather complete system in in a number of ways the other</subtitle>
 +
<subtitle id='01:01:08'>system is called Park Place small talk small talk</subtitle>
 +
<subtitle id='01:01:12'>8e and it is sort of the granddaddy of the small talks that that Xerox has</subtitle>
 +
<subtitle id='01:01:20'>released it has a even more complete set</subtitle>
 +
<subtitle id='01:01:25'>of system tools and some very ambitious</subtitle>
 +
<subtitle id='01:01:29'>applications written in it both of those are worthwhile looking at</subtitle>
 +
<subtitle id='01:01:35'>but for programming in the large objects</subtitle>
 +
<subtitle id='01:01:40'>aren't enough I don't believe and the reason is that at some point it's not</subtitle>
 +
<subtitle id='01:01:47'>simply a matter of piecing together something that is supposed to run it's a</subtitle>
 +
<subtitle id='01:01:53'>matter of being able to verify different</subtitle>
 +
<subtitle id='01:02:00'>sections different parts different modules independently to be able to</subtitle>
 +
<subtitle id='01:02:04'>unplug and replug and even I think in</subtitle>
 +
<subtitle id='01:02:08'>many cases it's desirable to allow different implementation languages to</subtitle>
 +
<subtitle id='01:02:14'>actually be used now if we look at the</subtitle>
 +
<subtitle id='01:02:20'>the standard</subtitle>
 +
<subtitle id='01:02:33'>so we have a glob and the main principle in object-oriented programming is to</subtitle>
 +
<subtitle id='01:02:38'>separate the outside from the inside so</subtitle>
 +
<subtitle id='01:02:43'>on the outside we have a variety of</subtitle>
 +
<subtitle id='01:02:48'>messages that we're willing to respond to and on the inside we have some</subtitle>
 +
<subtitle id='01:02:54'>methods oh sorry</subtitle>
 +
<subtitle id='01:03:01'>we have some methods the may or may not</subtitle>
 +
<subtitle id='01:03:06'>correspond to these things on the outside cuz whatever the idea is we're</subtitle>
 +
<subtitle id='01:03:10'>not supposed to understand what the inside looks at from looking at me on</subtitle>
 +
<subtitle id='01:03:15'>the outside and outside thing might even correspond to a little data structure</subtitle>
 +
<subtitle id='01:03:21'>inside a thing equally innocent might</subtitle>
 +
<subtitle id='01:03:25'>correspond to an enormous amount of code there might be code in here not directly</subtitle>
 +
<subtitle id='01:03:30'>connected to this and in fact some of the messages that the object may be able</subtitle>
 +
<subtitle id='01:03:35'>to receive aren't directly characterized in terms of some outside protocol lots</subtitle>
 +
<subtitle id='01:03:43'>of different variations here but the most important one here is that we're</subtitle>
 +
<subtitle id='01:03:48'>trying to separate a protocol</subtitle>
 +
<subtitle id='01:03:58'>from some methods</subtitle>
 +
<subtitle id='01:04:07'>at this level and then if we think about going a little bit more fine-grain where</subtitle>
 +
<subtitle id='01:04:12'>we started having zillions of objects interacting</subtitle>
 +
<subtitle id='01:04:24'>in a sea of messages</subtitle>
 +
<subtitle id='01:04:29'>in fact some of the</subtitle>
 +
<subtitle id='01:04:36'>some of the objects might not even be on the same machine they might actually be</subtitle>
 +
<subtitle id='01:04:40'>over here a good object-oriented system</subtitle>
 +
<subtitle id='01:04:46'>you shouldn't be able to tell what machine you're running on that's what</subtitle>
 +
<subtitle id='01:04:50'>messages are all about very quickly when</subtitle>
 +
<subtitle id='01:04:54'>we're starting to build a large system down here we've got something</subtitle>
 +
<subtitle id='01:04:58'>interesting we have absolute protection but we still have confusion right</subtitle>
 +
<subtitle id='01:05:03'>because it's you can have thousands of</subtitle>
 +
<subtitle id='01:05:08'>thousands of diamonds that are impervious to all normal wear and tear</subtitle>
 +
<subtitle id='01:05:15'>and still not be able to build the simplest structure out of them they may</subtitle>
 +
<subtitle id='01:05:19'>need to be too shiny may not be able to pile them up they may not fit together</subtitle>
 +
<subtitle id='01:05:23'>but by god they're perfect so what I'm</subtitle>
 +
<subtitle id='01:05:27'>trying to say is that the the protection issue is a critical one but it still</subtitle>
 +
<subtitle id='01:05:32'>doesn't guarantee that you actually have an architecture now in small talk in the</subtitle>
 +
<subtitle id='01:05:40'>most object-oriented systems how you come up with these guys is govern very</subtitle>
 +
<subtitle id='01:05:46'>much by convention there's a particular</subtitle>
 +
<subtitle id='01:05:50'>way like it's a convention in small talk systems that one of these guys will always be called print so that for every</subtitle>
 +
<subtitle id='01:05:58'>object in the system you're guaranteed that one of the messages you can send to</subtitle>
 +
<subtitle id='01:06:02'>it is print and theoretically what that</subtitle>
 +
<subtitle id='01:06:08'>means is this little patch of green in</subtitle>
 +
<subtitle id='01:06:12'>here that corresponds to print is</subtitle>
 +
<subtitle id='01:06:16'>supposed to print for you now there's nothing in small talk or any other</subtitle>
 +
<subtitle id='01:06:21'>object oriented system right now that guarantees that printing is going to be</subtitle>
 +
<subtitle id='01:06:28'>done now there was a strictly conventional it's something that</subtitle>
 +
<subtitle id='01:06:33'>everybody agrees to it's like overloading operators in Ada when you</subtitle>
 +
<subtitle id='01:06:39'>overload plus in order to give plus more</subtitle>
 +
<subtitle id='01:06:43'>meanings for different structures you're usually trying to adhere to something</subtitle>
 +
<subtitle id='01:06:50'>metaphorically similar to what plus originally stood for so for instance if</subtitle>
 +
<subtitle id='01:06:55'>you have a plus a plus it adds two numbers together you might overload it</subtitle>
 +
<subtitle id='01:07:00'>to apply two arrays so that the operation is some sort of point point</subtitle>
 +
<subtitle id='01:07:07'>point addition maybe vector addition sometimes you might overload strings -</subtitle>
 +
<subtitle id='01:07:15'>what could + mean and strings well one of the one of the ways of thinking about</subtitle>
 +
<subtitle id='01:07:19'>strings algebraically is that plus means concatenation because it's a way of</subtitle>
 +
<subtitle id='01:07:24'>adding two unary numbers together and so forth and at some point you started</subtitle>
 +
<subtitle id='01:07:29'>stretching it as you stretch the metaphor but generally you don't want</subtitle>
 +
<subtitle id='01:07:33'>Plus to go off and do some sort of multiply or something else but the only</subtitle>
 +
<subtitle id='01:07:38'>thing that controls that is some agreed on set of conventions and because of</subtitle>
 +
<subtitle id='01:07:45'>that what this protocol is how complicated it gets and so forth is the</subtitle>
 +
<subtitle id='01:07:51'>most important part in any kind of object-oriented design but it's also the</subtitle>
 +
<subtitle id='01:07:55'>most fragile the fact that there's</subtitle>
 +
<subtitle id='01:07:59'>nothing to protect print is absolutely</subtitle>
 +
<subtitle id='01:08:04'>critical let me let me give you an example of what we could do to protect</subtitle>
 +
<subtitle id='01:08:08'>print</subtitle>
 +
<subtitle id='01:08:17'>one of the things we could do is to have</subtitle>
 +
<subtitle id='01:08:22'>instead of having print just be code we</subtitle>
 +
<subtitle id='01:08:26'>could actually have a print class</subtitle>
 +
<subtitle id='01:08:38'>and its offspring its instances are</subtitle>
 +
<subtitle id='01:08:42'>actually structures that look like this</subtitle>
 +
<subtitle id='01:09:15'>okay in other words each offspring of print is a message method pair in which</subtitle>
 +
<subtitle id='01:09:28'>unrestricted code writing over here is not allowed does everybody understand</subtitle>
 +
<subtitle id='01:09:34'>why this is an interesting idea because</subtitle>
 +
<subtitle id='01:09:39'>so but if you could only if you can write anything here then J random</subtitle>
 +
<subtitle id='01:09:44'>programmer often will as you go as you</subtitle>
 +
<subtitle id='01:09:49'>go along and the fact that the system seems to be conventionalized at this</subtitle>
 +
<subtitle id='01:09:53'>protocol message level which is the very</subtitle>
 +
<subtitle id='01:09:57'>charm of object-oriented programming why object-oriented programs work so well why they fit together gets destroyed as</subtitle>
 +
<subtitle id='01:10:04'>the amount of generic information in the</subtitle>
 +
<subtitle id='01:10:09'>actual methods gets diluted but if</subtitle>
 +
<subtitle id='01:10:13'>another way of doing an object-oriented system is to actually make classes for</subtitle>
 +
<subtitle id='01:10:20'>each of the major code types that you're going to write and what you get here is</subtitle>
 +
<subtitle id='01:10:24'>something that would insert itself in here but in fact the only codes you're</subtitle>
 +
<subtitle id='01:10:33'>allowed to write are certain little restricted boxes in here and this thing</subtitle>
 +
<subtitle id='01:10:37'>guarantees that it's going to print for you it's not going to go off in zero</subtitle>
 +
<subtitle id='01:10:41'>byte five of some system file this thing</subtitle>
 +
<subtitle id='01:10:45'>because it came from a print class and because the print class does printing</subtitle>
 +
<subtitle id='01:10:49'>type things every piece of code that goes into a protocol actually is going</subtitle>
 +
<subtitle id='01:10:54'>to do something like printing and what you're allowed now is a certain amount</subtitle>
 +
<subtitle id='01:10:58'>of parameterization a certain amount of freedom but the meaning of print now has</subtitle>
 +
<subtitle id='01:11:04'>been nailed down because there's some actual code from the print class</subtitle>
 +
<subtitle id='01:11:09'>sticking behind here that you can't see that's going to make every effort to</subtitle>
 +
<subtitle id='01:11:14'>deliver a result that is what you want this is like types in type languages</subtitle>
 +
<subtitle id='01:11:21'>except it's stronger because it can controls the goal of the result the goal</subtitle>
 +
<subtitle id='01:11:27'>of the result not the shape of the result right in a typed</subtitle>
 +
<subtitle id='01:11:33'>language when you have a typed variable or type procedure what you can state is</subtitle>
 +
<subtitle id='01:11:39'>that might have some integer parameters and I'm going to deliver a</subtitle>
 +
<subtitle id='01:11:43'>floating-point result what you can't say</subtitle>
 +
<subtitle id='01:11:47'>in the type statement is what the intent of that procedure was the only intent</subtitle>
 +
<subtitle id='01:11:52'>that you could indicate is that's going to in it's going to give you some sort of floating-point result you can't say</subtitle>
 +
<subtitle id='01:11:58'>it was supposed to give you a sine or cosine or anything else that is up to</subtitle>
 +
<subtitle id='01:12:04'>the convention of the actual programmer</subtitle>
 +
<subtitle id='01:12:09'>itself so what I'm just pointing out here is that if you take a if you take a</subtitle>
 +
<subtitle id='01:12:16'>system in which there is a protocol you</subtitle>
 +
<subtitle id='01:12:20'>can get a lot out of it just by having the protocol be a convention agreed on</subtitle>
 +
<subtitle id='01:12:25'>by everybody as you go into a larger and larger system that that inside out</subtitle>
 +
<subtitle id='01:12:32'>outside Ness will protect against the inside getting dissolved by some hostile</subtitle>
 +
<subtitle id='01:12:40'>act action by the outside but what will get diluted as you go to a larger and</subtitle>
 +
<subtitle id='01:12:44'>larger system with more and more programmers is whether the protocol is</subtitle>
 +
<subtitle id='01:12:49'>going to have any meaning practical example in small talk has approximately</subtitle>
 +
<subtitle id='01:12:57'>Park Place small talk has approximately</subtitle>
 +
<subtitle id='01:13:02'>5000 of these green things each one of</subtitle>
 +
<subtitle id='01:13:06'>them is there each one of them can be reused by inheriting it from somebody</subtitle>
 +
<subtitle id='01:13:11'>else the number of red things it has is</subtitle>
 +
<subtitle id='01:13:15'>on the order of twenty one hundred that</subtitle>
 +
<subtitle id='01:13:20'>means that the amount of how generic the</subtitle>
 +
<subtitle id='01:13:25'>code is with respect to the protocol is not much right it should the number</subtitle>
 +
<subtitle id='01:13:31'>should be more like 400 or so different red things four hundred concepts and say</subtitle>
 +
<subtitle id='01:13:38'>five thousand realizations of those concepts now print is the happy exam exception to</subtitle>
 +
<subtitle id='01:13:44'>that because if you have a 154 different kinds of objects than their 154</subtitle>
 +
<subtitle id='01:13:51'>different green guys and only but only one print concept so there's the same</subtitle>
 +
<subtitle id='01:13:58'>technique that people use overloading of operators for you want to reduce the concept space by making it more</subtitle>
 +
<subtitle id='01:14:03'>algebraic make take a concept make as</subtitle>
 +
<subtitle id='01:14:07'>metaphorical as you possibly can and</subtitle>
 +
<subtitle id='01:14:11'>like equal is a good one what does equal mean some systems that</subtitle>
 +
<subtitle id='01:14:17'>means we have I'm looking at exactly the same thing some systems it's okay for</subtitle>
 +
<subtitle id='01:14:23'>the same if the same things look the same some systems is if under some</subtitle>
 +
<subtitle id='01:14:28'>particular evaluation rule they evaluate to the same thing or they might evaluate</subtitle>
 +
<subtitle id='01:14:32'>to the same thing so equal is one of these very slippery notions because it</subtitle>
 +
<subtitle id='01:14:37'>very quickly becomes useful to think of equal as being very useful in terms of</subtitle>
 +
<subtitle id='01:14:44'>equivalent this is equivalent to that</subtitle>
 +
<subtitle id='01:14:48'>that's a generic notion so again you might imagine that one of the one of the</subtitle>
 +
<subtitle id='01:14:54'>things you might like to have be generic</subtitle>
 +
<subtitle id='01:15:00'>are comparisons equal equal is a much</subtitle>
 +
<subtitle id='01:15:04'>stronger one of course than greater than or less than because greater than less than involve some sort of sorting but</subtitle>
 +
<subtitle id='01:15:10'>again greater than and less than don't have to apply just two numbers in small</subtitle>
 +
<subtitle id='01:15:15'>talk there's a super class called magnitudes and anything that can be</subtitle>
 +
<subtitle id='01:15:21'>sorted in any way under any kind of sorting rule is underneath magnitudes</subtitle>
 +
<subtitle id='01:15:26'>and underneath magnitudes are things</subtitle>
 +
<subtitle id='01:15:30'>like less than and greater than</subtitle>
 +
<subtitle id='01:15:35'>so for instance dates are an example</subtitle>
 +
<subtitle id='01:15:39'>times time intervals anything that can be sorted in any in any form you can</subtitle>
 +
<subtitle id='01:15:46'>those what you might what you would call operators in a de or automatically</subtitle>
 +
<subtitle id='01:15:51'>overloaded now what happens in an</subtitle>
 +
<subtitle id='01:15:56'>object-oriented start off with a nice set of these and then as practical</subtitle>
 +
<subtitle id='01:16:02'>programmers chew on it the heat of debugging one of the things we</subtitle>
 +
<subtitle id='01:16:06'>discovered is that even good programmers don't make up generic operators for</subtitle>
 +
<subtitle id='01:16:14'>things what they do is they make up any old word think they can think of at the moment write a method for it and</subtitle>
 +
<subtitle id='01:16:19'>continue on the result is that what the</subtitle>
 +
<subtitle id='01:16:24'>object-oriented style was buying for you starts diluting it starts gradually</subtitle>
 +
<subtitle id='01:16:29'>diluting away the manuals get larger and</subtitle>
 +
<subtitle id='01:16:34'>all of a sudden you're back to something that is close to what you had before so</subtitle>
 +
<subtitle id='01:16:39'>I'm not I'm not sure if people didn't understand this explanation I'll be glad</subtitle>
 +
<subtitle id='01:16:46'>to go over it again because it's it's</subtitle>
 +
<subtitle id='01:16:50'>it's one of the important examples of something that you can actually do with an object-oriented system everybody more</subtitle>
 +
<subtitle id='01:16:56'>let's get what I was talking about that you can actually legislate one of the</subtitle>
 +
<subtitle id='01:17:00'>things you can do in an object-oriented system is to legislate to some extent</subtitle>
 +
<subtitle id='01:17:04'>even what the code that the programmer is going to write is going to deliver to</subtitle>
 +
<subtitle id='01:17:08'>you you can build in to these main</subtitle>
 +
<subtitle id='01:17:13'>concept classes the tests to see whether</subtitle>
 +
<subtitle id='01:17:17'>the code is it all behaving the way you think it is those tests can be run</subtitle>
 +
<subtitle id='01:17:22'>independently of the programmers who are writing the code now another thing you</subtitle>
 +
<subtitle id='01:17:27'>can do using these protocol ideas is</subtitle>
 +
<subtitle id='01:17:31'>horrible as it sounds there's no reason why you can't put some COBOL in here</subtitle>
 +
<subtitle id='01:17:38'>this is not something that people do in</subtitle>
 +
<subtitle id='01:17:42'>a typical object-oriented language like small talk because it's designed to to</subtitle>
 +
<subtitle id='01:17:48'>write all of the methods in itself but if you think about this whole notion</subtitle>
 +
<subtitle id='01:17:55'>here as a binding mechanism for a component not just as a way of</subtitle>
 +
<subtitle id='01:18:01'>protecting a data structure but a binding mechanism as a component then</subtitle>
 +
<subtitle id='01:18:05'>what you really are programming in terms with is the blue and the red what the</subtitle>
 +
<subtitle id='01:18:16'>green is is almost completely independent as long as it conforms to</subtitle>
 +
<subtitle id='01:18:24'>whatever this guy wants it to be able to do what I advise large companies when</subtitle>
 +
<subtitle id='01:18:31'>they are embarking on object-oriented programming is to do a few systems using</subtitle>
 +
<subtitle id='01:18:36'>something like small talk or preferably just to get an idea of what it's about</subtitle>
 +
<subtitle id='01:18:42'>but then think of all the things that you've already learned about controlling</subtitle>
 +
<subtitle id='01:18:46'>modules and systems and realize that the</subtitle>
 +
<subtitle id='01:18:50'>small sizes of the code of the small talks from the 70s don't have all the</subtitle>
 +
<subtitle id='01:18:54'>protections in there that you actually need what you really need is what these</subtitle>
 +
<subtitle id='01:18:58'>days is called a configuration language a C language configuration language</subtitle>
 +
<subtitle id='01:19:13'>and this language can be independent of all of your method languages it's it's</subtitle>
 +
<subtitle id='01:19:19'>something that is dealt with it the operating system-level it's something in</subtitle>
 +
<subtitle id='01:19:23'>which the protocols are chosen as much as possible ahead of time it's a</subtitle>
 +
<subtitle id='01:19:28'>standard vocabulary of concepts that you're going to use to write in it's one</subtitle>
 +
<subtitle id='01:19:32'>in which the protocols are controlled by active code the give you places to write</subtitle>
 +
<subtitle id='01:19:38'>code and insert other code that allow you to bring over a COBOL routine or a</subtitle>
 +
<subtitle id='01:19:43'>Fortran routine or whatever the heck you want and bind it in it's a binding</subtitle>
 +
<subtitle id='01:19:47'>mechanism it's a way of setting up</subtitle>
 +
<subtitle id='01:19:51'>environments for debugging modules</subtitle>
 +
<subtitle id='01:19:56'>independently of each other it's a way of assuring yourself that a module will</subtitle>
 +
<subtitle id='01:20:00'>be able to move from one place to another it's a way of discovering</subtitle>
 +
<subtitle id='01:20:04'>whether you want to use a module so at</subtitle>
 +
<subtitle id='01:20:08'>some point the ability for human to read this configuration language is going to</subtitle>
 +
<subtitle id='01:20:12'>be much more important than the ability to write it one of the embarrassments</subtitle>
 +
<subtitle id='01:20:18'>that you often find in an object-oriented language is you have all</subtitle>
 +
<subtitle id='01:20:22'>of us we have usable code and it's too hard to find the modules you want to</subtitle>
 +
<subtitle id='01:20:27'>reuse small talk has a lot of that flavor anybody who's ever tried</subtitle>
 +
<subtitle id='01:20:32'>programming and especially in small talk 80 is bewildered by the fact that the</subtitle>
 +
<subtitle id='01:20:39'>system is completely written in itself there are tons of usable things in there</subtitle>
 +
<subtitle id='01:20:43'>and yet it is such a pain to find those things you wind up tandem out having to</subtitle>
 +
<subtitle id='01:20:48'>read other people's code and then in order to find out whether you actually</subtitle>
 +
<subtitle id='01:20:54'>want to use the stuff so the for instance what Arthur Andersen is doing</subtitle>
 +
<subtitle id='01:20:59'>right now is to try and come up with</subtitle>
 +
<subtitle id='01:21:04'>something that is completely independent just completely x-out forget about the</subtitle>
 +
<subtitle id='01:21:12'>interior stuff just come up with something that is basically modules in</subtitle>
 +
<subtitle id='01:21:17'>terms of blues and Red's making the the</subtitle>
 +
<subtitle id='01:21:21'>red message protocol be as powerful as possible controlled by other things and</subtitle>
 +
<subtitle id='01:21:25'>then using that as a dynamic binding mechanism for</subtitle>
 +
<subtitle id='01:21:30'>configuring programs it allows them to</subtitle>
 +
<subtitle id='01:21:34'>take large sections of database and</subtitle>
 +
<subtitle id='01:21:38'>sequel calls that they've already done and bind it into an object-oriented</subtitle>
 +
<subtitle id='01:21:42'>framework as an example yeah yeah</subtitle>
 +
<subtitle id='01:21:57'>so configuration</subtitle>
 +
<subtitle id='01:22:02'>let's start off with the things that you might want to have in it now the there's</subtitle>
 +
<subtitle id='01:22:08'>only I only know of one actually good configuration language that's been done</subtitle>
 +
<subtitle id='01:22:13'>as a language called C Mesa which was</subtitle>
 +
<subtitle id='01:22:17'>done by the Parc computer science lab</subtitle>
 +
<subtitle id='01:22:21'>about ten years ago and it served</subtitle>
 +
<subtitle id='01:22:25'>exactly this this purpose and here are some of the things can have it there are</subtitle>
 +
<subtitle id='01:22:31'>some things that you'd expect just from your previous experience you'd expect</subtitle>
 +
<subtitle id='01:22:36'>that there would be some sort of message name for something you'd expect that</subtitle>
 +
<subtitle id='01:22:45'>there would be I Oh parameters so that</subtitle>
 +
<subtitle id='01:22:53'>you would have input expectations</subtitle>
 +
<subtitle id='01:23:02'>output expectation</subtitle>
 +
<subtitle id='01:23:11'>a good configuration language has a an executable predicate you can think of as</subtitle>
 +
<subtitle id='01:23:19'>a goal that they may have a variety of</subtitle>
 +
<subtitle id='01:23:26'>them and I connect those with when I say</subtitle>
 +
<subtitle id='01:23:31'>input expectations I mean not just the</subtitle>
 +
<subtitle id='01:23:35'>types of the parameters that you expect to send to it and the types of the</subtitle>
 +
<subtitle id='01:23:40'>results but also these predicates sorry</subtitle>
 +
<subtitle id='01:23:47'>predicates you can think of</subtitle>
 +
<subtitle id='01:23:52'>preconditions on the input side and goals on the output side</subtitle>
 +
<subtitle id='01:24:04'>you can think of those as being executable there are environmental</subtitle>
 +
<subtitle id='01:24:17'>expectations</subtitle>
 +
<subtitle id='01:24:22'>one of the difficulties in most object-oriented programming languages is</subtitle>
 +
<subtitle id='01:24:26'>although you can protect an object what</subtitle>
 +
<subtitle id='01:24:30'>you don't have any sense of when you want to move an object is what the</subtitle>
 +
<subtitle id='01:24:34'>object itself expects to have as environment as a give you an example in</subtitle>
 +
<subtitle id='01:24:42'>small talk you can write an object move</subtitle>
 +
<subtitle id='01:24:49'>it for one place of a particular Smalltalk system to another but when you</subtitle>
 +
<subtitle id='01:24:54'>want to take it out of your small talk system and give it to somebody else a small talk system you often are</subtitle>
 +
<subtitle id='01:24:58'>unpleasantly surprised and it's not that</subtitle>
 +
<subtitle id='01:25:02'>the object has been solid in any way it's that it has some other assumptions</subtitle>
 +
<subtitle id='01:25:07'>about its environment that you weren't thinking about before in particular</subtitle>
 +
<subtitle id='01:25:13'>small talk allows you to do the somewhat obscene thing of allowing you to go and</subtitle>
 +
<subtitle id='01:25:20'>change existing super classes to make them more the way you like the benefit</subtitle>
 +
<subtitle id='01:25:26'>of this is that every class and the system feels this improvement and the</subtitle>
 +
<subtitle id='01:25:30'>problem with it is if that improvement is important then you've all of a sudden</subtitle>
 +
<subtitle id='01:25:34'>have done away with your portability so what I'm trying to point out here is</subtitle>
 +
<subtitle id='01:25:39'>that the modularity you get in object-oriented programming is slippery</subtitle>
 +
<subtitle id='01:25:43'>and one of the most critical things to do is to be able to pin down the amount</subtitle>
 +
<subtitle id='01:25:50'>of modularity that's actually there I'm gonna I'm going to go into that in a</subtitle>
 +
<subtitle id='01:25:54'>little more detail so the there are more</subtitle>
 +
<subtitle id='01:26:00'>things that are here people have design</subtitle>
 +
<subtitle id='01:26:06'>configurations languages in such a form that you can actually from the runnable</subtitle>
 +
<subtitle id='01:26:13'>parts of the stuff that you can actually derive an explanation mechanically of what the method and what</subtitle>
 +
<subtitle id='01:26:21'>the module itself is supposed to do</subtitle>
 +
<subtitle id='01:26:30'>okay so there are any number of things</subtitle>
 +
<subtitle id='01:26:34'>basically it's something a little bit more close closer in spirit to Parnas</subtitle>
 +
<subtitle id='01:26:40'>they've partners who did one of the original notions about information</subtitle>
 +
<subtitle id='01:26:44'>hiding although it wasn't object-oriented than what you might think of as straight object-oriented</subtitle>
 +
<subtitle id='01:26:49'>doctrine and that each one of these these things is part of</subtitle>
 +
<subtitle id='01:27:04'>this blue</subtitle>
 +
<subtitle id='01:27:10'>no Sheena that this forms a class from</subtitle>
 +
<subtitle id='01:27:17'>which we get the various instances that</subtitle>
 +
<subtitle id='01:27:21'>our system is actually made up of so each each a little instance</subtitle>
 +
<subtitle id='01:27:41'>now it is often the case that if these</subtitle>
 +
<subtitle id='01:27:47'>two predicates here are done correctly you can actually run you do your</subtitle>
 +
<subtitle id='01:27:53'>prototyping by running the blue thing essentially without any green things</subtitle>
 +
<subtitle id='01:28:00'>inside of it or you can think of it</subtitle>
 +
<subtitle id='01:28:04'>being just tiny little green things that come along because of what these are yes</subtitle>
 +
<subtitle id='01:28:17'>okay the this is it's similar to ADA</subtitle>
 +
<subtitle id='01:28:23'>except that ADA for instance doesn't have inheritance and so does everybody</subtitle>
 +
<subtitle id='01:28:30'>here understand what I'm not sure I didn't come to give a tutorial so I'm</subtitle>
 +
<subtitle id='01:28:34'>not sure what I'm what I was supposed to assume everybody knows about the thing but in most object-oriented languages is</subtitle>
 +
<subtitle id='01:28:40'>this notion of inheritance that you can</subtitle>
 +
<subtitle id='01:28:45'>define something very general and abstract like</subtitle>
 +
<subtitle id='01:28:55'>say a thing called a magnitude</subtitle>
 +
<subtitle id='01:29:02'>in a magnitude maybe something even more</subtitle>
 +
<subtitle id='01:29:07'>abs I mean let me use the fresh sheet of paper</subtitle>
 +
<subtitle id='01:29:14'>start off with something really abstract like a general object and then one of</subtitle>
 +
<subtitle id='01:29:25'>the operations and an object you might want to have for every object is</subtitle>
 +
<subtitle id='01:29:29'>equality then a little less abstract you</subtitle>
 +
<subtitle id='01:29:36'>might have something called a magnitude</subtitle>
 +
<subtitle id='01:29:40'>one of its operations might be less than</subtitle>
 +
<subtitle id='01:29:46'>but there still that might not be any notion of what addition is coming down a</subtitle>
 +
<subtitle id='01:29:52'>little bit further you might have something called a number and it might</subtitle>
 +
<subtitle id='01:29:59'>have a notion of plus and there might be</subtitle>
 +
<subtitle id='01:30:05'>a various specializations of numbers so you might have an integer a fraction</subtitle>
 +
<subtitle id='01:30:15'>these guys might have their own versions of plus the notion of inheritance is</subtitle>
 +
<subtitle id='01:30:21'>that very often you can get a compact</subtitle>
 +
<subtitle id='01:30:26'>sorry you can get a compact description</subtitle>
 +
<subtitle id='01:30:30'>of a wide variety of behaviors by</subtitle>
 +
<subtitle id='01:30:35'>factoring out behavior as abstract li as</subtitle>
 +
<subtitle id='01:30:39'>you possibly can you move it as high as you possibly can and occasionally you</subtitle>
 +
<subtitle id='01:30:44'>may have to give your own versions of things like integer may want its own</subtitle>
 +
<subtitle id='01:30:50'>version of what plus generally is it may</subtitle>
 +
<subtitle id='01:30:54'>even want to have its own version of what less than is or may be able to use this general one up here and but</subtitle>
 +
<subtitle id='01:31:02'>inheritance actually allows you to</subtitle>
 +
<subtitle id='01:31:06'>cascade descriptions and in a number of</subtitle>
 +
<subtitle id='01:31:10'>object-oriented systems particularly the AI ones you can actually blend them</subtitle>
 +
<subtitle id='01:31:14'>together in various ways so you can actually say this this thing is not just</subtitle>
 +
<subtitle id='01:31:20'>a number it is also a geometric object and inherit a bunch of things from the</subtitle>
 +
<subtitle id='01:31:25'>side as well so what go to when I talk about doing the</subtitle>
 +
<subtitle id='01:31:31'>configuration stuff I mean to imply all</subtitle>
 +
<subtitle id='01:31:38'>the things that you usually do in a typed language but also applied to a</subtitle>
 +
<subtitle id='01:31:46'>system that has inheritance because it's inheritance in object or any languages</subtitle>
 +
<subtitle id='01:31:50'>is how you share things the goal of</subtitle>
 +
<subtitle id='01:31:55'>release it has been the goal for the last 20 years of people who do this and</subtitle>
 +
<subtitle id='01:31:59'>write very small very reusable very</subtitle>
 +
<subtitle id='01:32:03'>compact code the goal goal is to make</subtitle>
 +
<subtitle id='01:32:07'>the things that are shared as abstract</subtitle>
 +
<subtitle id='01:32:11'>and inheritable as they possibly can be</subtitle>
 +
<subtitle id='01:32:15'>so you want the smallest number of</subtitle>
 +
<subtitle id='01:32:19'>maximally independent concepts that you</subtitle>
 +
<subtitle id='01:32:24'>can Tinkertoy together and have some confidence that the active Tinkertoy is</subtitle>
 +
<subtitle id='01:32:30'>going to give you something that also still works the whole idea in</subtitle>
 +
<subtitle id='01:32:35'>object-oriented style is to linearly combine things together not a native</subtitle>
 +
<subtitle id='01:32:39'>package allows you to subsume some of</subtitle>
 +
<subtitle id='01:32:45'>the details of a data structure it does</subtitle>
 +
<subtitle id='01:32:49'>not allow you for instance to define</subtitle>
 +
<subtitle id='01:32:53'>generic operations which are then</subtitle>
 +
<subtitle id='01:32:57'>inherited by subclasses because it simply doesn't allow you to subclass and</subtitle>
 +
<subtitle id='01:33:03'>what that we leaves you add is a single single layer of description for</subtitle>
 +
<subtitle id='01:33:08'>something which you can get instances from but you can't you generally Eneida</subtitle>
 +
<subtitle id='01:33:12'>do not write an abstract thing that you're going to get in instances from</subtitle>
 +
<subtitle id='01:33:17'>because usually these very abstract types like magnitude and so forth aren't</subtitle>
 +
<subtitle id='01:33:23'>things that you want to use directly they're really placeholders for general</subtitle>
 +
<subtitle id='01:33:27'>code and strategies and this is a foreign idea in the in the aid of</subtitle>
 +
<subtitle id='01:33:32'>programming world which is almost entirely concrete yes</subtitle>
 +
<subtitle id='01:33:37'>well I do to an actually ADA shouldn't</subtitle>
 +
<subtitle id='01:33:42'>even really call them generics from but it's yeah it's okay anybody can use a</subtitle>
 +
<subtitle id='01:33:47'>name for whatever they want but it's that's a it's a different way of</subtitle>
 +
<subtitle id='01:33:51'>thinking about what generic is than what I'm thinking about here the generic power in an object-oriented programming</subtitle>
 +
<subtitle id='01:33:56'>language is your ability to not just</subtitle>
 +
<subtitle id='01:34:00'>reuse a concept sideways but also to advance it abstractly the more you can</subtitle>
 +
<subtitle id='01:34:06'>advance it abstractly the more chance it has of being involved in in an abstract</subtitle>
 +
<subtitle id='01:34:12'>design the less probability you have of having to recode whole strategy here's</subtitle>
 +
<subtitle id='01:34:19'>is true is to avoid recoding remember we</subtitle>
 +
<subtitle id='01:34:23'>got off on this thing I'm just pointing out there's just really just an aside</subtitle>
 +
<subtitle id='01:34:27'>remark that you could make a very strong</subtitle>
 +
<subtitle id='01:34:36'>object-oriented programming language by being completely independent of whatever</subtitle>
 +
<subtitle id='01:34:43'>the methods are actually coded yet that was the whole point behind that</subtitle>
 +
<subtitle id='01:34:48'>digression that as you build yourself object-oriented tools you're much better</subtitle>
 +
<subtitle id='01:34:53'>off worrying about the integrity of the</subtitle>
 +
<subtitle id='01:34:57'>individual objects and then the next thing is can an object be a component</subtitle>
 +
<subtitle id='01:35:01'>and fit into some larger scale protocol</subtitle>
 +
<subtitle id='01:35:05'>when I say a component I mean something like let's say a paragraph of text or</subtitle>
 +
<subtitle id='01:35:11'>generic gear something that actually has a fair amount of meaning behind it might</subtitle>
 +
<subtitle id='01:35:15'>even have its own inference engine as part of it talking about something that</subtitle>
 +
<subtitle id='01:35:20'>can be used in a wide variety of cases in which the sharing is more than</subtitle>
 +
<subtitle id='01:35:24'>parametric you're really getting not</subtitle>
 +
<subtitle id='01:35:28'>just a class of things you're you're sharing a notion that somebody has come</subtitle>
 +
<subtitle id='01:35:34'>up a concept a set of concepts that somebody has come up with this obscure</subtitle>
 +
<subtitle id='01:35:43'>it's the hardest it's actually the</subtitle>
 +
<subtitle id='01:35:47'>hardest thing to explain simply because I'm gonna try another pass at it one of</subtitle>
 +
<subtitle id='01:35:55'>the reasons it's hard to explain is that the this notion because of ADA being</subtitle>
 +
<subtitle id='01:36:01'>called object oriented being taught in school as being object oriented actually</subtitle>
 +
<subtitle id='01:36:05'>has clouded the the issue considerably so it's very difficult to even explain</subtitle>
 +
<subtitle id='01:36:12'>why some of these ideas are more complex let me give you another completely</subtitle>
 +
<subtitle id='01:36:18'>different idea this has to do with</subtitle>
 +
<subtitle id='01:36:23'>another way of thinking about modularity now in most object-oriented systems the</subtitle>
 +
<subtitle id='01:36:35'>modularity that is gotten by them is one</subtitle>
 +
<subtitle id='01:36:40'>that is regard to the state that you put</subtitle>
 +
<subtitle id='01:36:44'>in each each object what isn't modular is the control</subtitle>
 +
<subtitle id='01:36:52'>this is another set of issues to talk about so for example one of the things</subtitle>
 +
<subtitle id='01:37:01'>that you may see when you're looking into an object-oriented programming is is you may see the state and each neatly</subtitle>
 +
<subtitle id='01:37:06'>encapsulated but you may see control going all over the place what happens</subtitle>
 +
<subtitle id='01:37:10'>when you send a message the answer is often I don't know goes here goes there and find somebody</subtitle>
 +
<subtitle id='01:37:16'>here talks to this guy dozens of things happen and I can't even tell whether</subtitle>
 +
<subtitle id='01:37:22'>control is ever going to get back to me that's often the state of affairs now</subtitle>
 +
<subtitle id='01:37:29'>what would happen if we actually made control modular</subtitle>
 +
<subtitle id='01:37:41'>we'd have something more like this where</subtitle>
 +
<subtitle id='01:37:46'>instead of control going through the objects the objects themselves are</subtitle>
 +
<subtitle id='01:37:50'>sitting in a sea of messages but they</subtitle>
 +
<subtitle id='01:37:54'>don't actually originate them themselves how is that possible well one way you</subtitle>
 +
<subtitle id='01:38:01'>can imagine for it to be possible is for the objects to simply say I need to know</subtitle>
 +
<subtitle id='01:38:10'>the following put needs in here</subtitle>
 +
<subtitle id='01:38:31'>now the object there are object-oriented system is one of the ones we've just</subtitle>
 +
<subtitle id='01:38:35'>developed at Apple one that we did at MIT is an object-oriented system in</subtitle>
 +
<subtitle id='01:38:40'>which you never send a message okay you</subtitle>
 +
<subtitle id='01:38:45'>only receive how is it possible well the</subtitle>
 +
<subtitle id='01:38:49'>system contrives to make the messages get to you by looking at your needs and</subtitle>
 +
<subtitle id='01:38:55'>looking around to see who might supply those needs</subtitle>
 +
<subtitle id='01:38:59'>okay is this obscure okay so an example</subtitle>
 +
<subtitle id='01:39:06'>is suppose your</subtitle>
 +
<subtitle id='01:39:17'>suppose you're a a button whose job it</subtitle>
 +
<subtitle id='01:39:24'>is to move the corner of a window so one</subtitle>
 +
<subtitle id='01:39:29'>of the ways of programming that is for</subtitle>
 +
<subtitle id='01:39:33'>you to be in a loop constantly looking</subtitle>
 +
<subtitle id='01:39:37'>to see if the mouse is coming into you okay it's a polling solution to the</subtitle>
 +
<subtitle id='01:39:43'>problem where somebody is polling somewhere but you're constantly looking</subtitle>
 +
<subtitle id='01:39:47'>to see whether the mouse is coming in when the mouse comes in then you say okay now I know what to do I'm going to</subtitle>
 +
<subtitle id='01:39:54'>latch on to the mouse's coordinates and I'm going to tell my window owner</subtitle>
 +
<subtitle id='01:40:00'>exactly how he should be moved around and so as we move around the corner the</subtitle>
 +
<subtitle id='01:40:04'>window corner moves around itself and so</subtitle>
 +
<subtitle id='01:40:10'>that's that's this kind of style of programming control is explicit we have</subtitle>
 +
<subtitle id='01:40:15'>to poll to find out things that are going on the other way of doing it is I</subtitle>
 +
<subtitle id='01:40:20'>could just say I need to know when the mouse comes in to me and then I can do</subtitle>
 +
<subtitle id='01:40:29'>my job this is like an on condition but</subtitle>
 +
<subtitle id='01:40:34'>it's an on condition that has to be scoped because we can't have it</subtitle>
 +
<subtitle id='01:40:40'>happening every time the princess the mouse button goes down but we can</subtitle>
 +
<subtitle id='01:40:45'>imagine that this guy can say okay I have a set of conditions I'm not going</subtitle>
 +
<subtitle id='01:40:50'>to explicitly look for it I'm just going to tell the world that if I had these</subtitle>
 +
<subtitle id='01:40:55'>conditions come true for me then I would be able to fulfill my</subtitle>
 +
<subtitle id='01:41:03'>obligations to the rest of the system I'd know what to do likewise the window</subtitle>
 +
<subtitle id='01:41:08'>that encloses this guy could also have a</subtitle>
 +
<subtitle id='01:41:12'>set of conditions that say well if the corner if my corner guy starts moving I</subtitle>
 +
<subtitle id='01:41:17'>should probably move too I'll change my size if he moves so if</subtitle>
 +
<subtitle id='01:41:23'>only if somebody would let me know that then I'll go along see what this is like</subtitle>
 +
<subtitle id='01:41:27'>this is like constraint programming okay we're going from</subtitle>
 +
<subtitle id='01:41:31'>a procedural style which controls past</subtitle>
 +
<subtitle id='01:41:35'>explicitly around to a declarative style in which were simply indicating needs</subtitle>
 +
<subtitle id='01:41:40'>and the system without having to do any problem-solving is picking up the slack</subtitle>
 +
<subtitle id='01:41:46'>by providing the actual information in the forms of messages HyperCard has this</subtitle>
 +
<subtitle id='01:41:51'>about half way it's a technique we've been experimenting with at Apple for the</subtitle>
 +
<subtitle id='01:41:56'>last couple of years and what it looks</subtitle>
 +
<subtitle id='01:42:00'>like it's able to do is to completely</subtitle>
 +
<subtitle id='01:42:04'>remove the necessity for actually being able to follow a control flow what does</subtitle>
 +
<subtitle id='01:42:09'>this mean when you move an object from one place to another</subtitle>
 +
<subtitle id='01:42:19'>when you move an object from some place into this kind of situation nothing is</subtitle>
 +
<subtitle id='01:42:26'>going to happen with sorry kind of a</subtitle>
 +
<subtitle id='01:42:30'>tiny screen isn't it and you put in when you move a new object in here in this</subtitle>
 +
<subtitle id='01:42:36'>kind of situation nothing is going to happen to that object unless you go in</subtitle>
 +
<subtitle id='01:42:40'>and recode somebody else in order to send it some messages right and so my</subtitle>
 +
<subtitle id='01:42:47'>modularity of being able to move an object from one place to another depends</subtitle>
 +
<subtitle id='01:42:52'>on me being able to do some kind of modification and the system is already</subtitle>
 +
<subtitle id='01:42:56'>there that's not so good it's good in the sense that this object is guaranteed</subtitle>
 +
<subtitle id='01:43:01'>not to hurt anybody and it's going to protect its own self from being moved</subtitle>
 +
<subtitle id='01:43:06'>around but in fact I still have to go in and make some sort of modification in</subtitle>
 +
<subtitle id='01:43:11'>order to get control the flow when I</subtitle>
 +
<subtitle id='01:43:19'>put in a new blue guy here</subtitle>
 +
<subtitle id='01:43:29'>and he has all his needs specified is he</subtitle>
 +
<subtitle id='01:43:34'>going to be able to run why</subtitle>
 +
<subtitle id='01:43:44'>because he doesn't have because the whole idea is that he's not intertwined</subtitle>
 +
<subtitle id='01:43:51'>with anybody else's control he's simply saying I know what I need god damn it</subtitle>
 +
<subtitle id='01:43:58'>then the question is can the system actually deliver those needs just</subtitle>
 +
<subtitle id='01:44:02'>because he's a new thing and the answer seems to be yes this is a peek into the</subtitle>
 +
<subtitle id='01:44:07'>object-oriented programming of the next couple of years in interesting you know</subtitle>
 +
<subtitle id='01:44:12'>if this the need to do things this way came out of yet another project with</subtitle>
 +
<subtitle id='01:44:16'>children all of the object-oriented stuff has developed at Park and the</subtitle>
 +
<subtitle id='01:44:21'>Macintosh user interface came from a set</subtitle>
 +
<subtitle id='01:44:25'>of designs to try and allow children to</subtitle>
 +
<subtitle id='01:44:30'>do serious programming on a computer that was what forced object-oriented</subtitle>
 +
<subtitle id='01:44:34'>programming out into the open the last set of stuff that we've been doing with</subtitle>
 +
<subtitle id='01:44:38'>children at Apple forced this out of the open because we wanted children younger</subtitle>
 +
<subtitle id='01:44:42'>than nine to be able to program and children younger than nine have a very</subtitle>
 +
<subtitle id='01:44:46'>hard time following control flow of course when we're thinking about that</subtitle>
 +
<subtitle id='01:44:51'>we're thinking well of course they have a hard time following control flow so do we except where you see the problem is</subtitle>
 +
<subtitle id='01:44:59'>adults are used to suffering so it's why</subtitle>
 +
<subtitle id='01:45:04'>I like why I like to design for children so designing this new programming</subtitle>
 +
<subtitle id='01:45:08'>language for children I'm going to give you a little example of some of the stuff programmed in it this notion of</subtitle>
 +
<subtitle id='01:45:17'>making control completely modular by going to a needs thing became apparent</subtitle>
 +
<subtitle id='01:45:23'>yes</subtitle>
 +
<subtitle id='01:45:27'>yes</subtitle>
 +
<subtitle id='01:45:33'>yeah well it's complicated because I'll</subtitle>
 +
<subtitle id='01:45:41'>give you I'll give you a simple example and then maybe we can generalize it a</subtitle>
 +
<subtitle id='01:45:47'>little bit the motivation came from a couple of years ago of you know</subtitle>
 +
<subtitle id='01:45:53'>wondering why it was so easy to program in spreadsheets and wondering what</subtitle>
 +
<subtitle id='01:45:58'>spreadsheets would be like if there are more object oriented I've always thought of the spreadsheet cells as being almost</subtitle>
 +
<subtitle id='01:46:03'>an object and spreadsheet cells have this nice characteristic that they they</subtitle>
 +
<subtitle id='01:46:09'>are these aren't they in other words the</subtitle>
 +
<subtitle id='01:46:13'>very act of writing the spreadsheet expression indicates to the rest of the</subtitle>
 +
<subtitle id='01:46:17'>spreadsheet system what your needs are now usually they're pretty simple needs</subtitle>
 +
<subtitle id='01:46:21'>they're just I need to know the values of so-and-so cells relative to where I I</subtitle>
 +
<subtitle id='01:46:26'>am but I got interested in generalizing that and started off with a spreadsheet</subtitle>
 +
<subtitle id='01:46:34'>system that I did in small talk that had</subtitle>
 +
<subtitle id='01:46:38'>a spreadsheet optimizer that first started off simply trying to look at</subtitle>
 +
<subtitle id='01:46:45'>places you wanted to get values from and building a propagation network rather</subtitle>
 +
<subtitle id='01:46:49'>than executing every cell every for every change in this especially I think</subtitle>
 +
<subtitle id='01:46:53'>most of you were aware that most spreadsheets today do not execute every</subtitle>
 +
<subtitle id='01:46:57'>cell there's a propagation network built by the spreadsheet compiler that you</subtitle>
 +
<subtitle id='01:47:01'>don't see that tries to find you the</subtitle>
 +
<subtitle id='01:47:06'>minimal number of things that have to be executed every time the change is made</subtitle>
 +
<subtitle id='01:47:11'>in the in the spreadsheet I started working on that and then the next thing</subtitle>
 +
<subtitle id='01:47:16'>is to go to billions where you're interested in whenever something like</subtitle>
 +
<subtitle id='01:47:21'>for instance whatever this is equal to that I would like to do something or</subtitle>
 +
<subtitle id='01:47:27'>whenever this is less than that I'd like to do something and the I'll just give</subtitle>
 +
<subtitle id='01:47:32'>you a hint of it</subtitle>
 +
<subtitle id='01:47:44'>so they start out with this fairly</subtitle>
 +
<subtitle id='01:47:50'>simple idea that if you have a variable somewhere one of the things that you can</subtitle>
 +
<subtitle id='01:47:57'>do is to link you can have a link to all</subtitle>
 +
<subtitle id='01:48:05'>of the different places that ever need</subtitle>
 +
<subtitle id='01:48:10'>the value of that variable and when this</subtitle>
 +
<subtitle id='01:48:15'>changes you simply fire off all of these guys and you get the desired result</subtitle>
 +
<subtitle id='01:48:24'>let's take an expression now so we take</subtitle>
 +
<subtitle id='01:48:30'>an expression like a is less than B or C</subtitle>
 +
<subtitle id='01:48:39'>is greater than equal to D and then ask</subtitle>
 +
<subtitle id='01:48:45'>what we'd have to do to that to make that efficient the answer is you make</subtitle>
 +
<subtitle id='01:48:50'>this thing into a little tree and at each stage each node of the tree you</subtitle>
 +
<subtitle id='01:48:59'>hold the very the value of the things so</subtitle>
 +
<subtitle id='01:49:03'>far</subtitle>
 +
<subtitle id='01:49:10'>so in this case the a value would be linked through here and you can think of</subtitle>
 +
<subtitle id='01:49:17'>the tree is pointing upwards</subtitle>
 +
<subtitle id='01:49:29'>okay and we can presume that this let's</subtitle>
 +
<subtitle id='01:49:33'>make this an just for the heck of it</subtitle>
 +
<subtitle id='01:49:42'>see that this is false and we assume that this is true and that this is false</subtitle>
 +
<subtitle id='01:49:50'>let's do it the other way I make this true</subtitle>
 +
<subtitle id='01:49:55'>this false so the idea is now if it</subtitle>
 +
<subtitle id='01:50:00'>changes the insight here is that all you have to do is compare it to whatever the</subtitle>
 +
<subtitle id='01:50:06'>current value of B is let's say this goes to to true you don't have to</subtitle>
 +
<subtitle id='01:50:12'>recompute this guy because it didn't change it's already part of this frozen</subtitle>
 +
<subtitle id='01:50:16'>result and then you come up and recompute this guy so you bait what you</subtitle>
 +
<subtitle id='01:50:21'>basically have done in this technique is to have sorted the actual computation</subtitle>
 +
<subtitle id='01:50:25'>that you have to make this this tech this way of doing things is called a</subtitle>
 +
<subtitle id='01:50:30'>continuously evaluating expression</subtitle>
 +
<subtitle id='01:50:41'>so it's a conglomerate of things it's actually a little computation engine designed to compute in parallel and only</subtitle>
 +
<subtitle id='01:50:48'>the stuff that needs to get computed gets computed so you the computation now</subtitle>
 +
<subtitle id='01:50:53'>the compiler instead of compiling machine code in a system like this is actually compiling a propagation people</subtitle>
 +
<subtitle id='01:51:00'>are interested in these techniques I refer you to the books on functional programming mostly being written in</subtitle>
 +
<subtitle id='01:51:07'>England these these days functional program is about this and well-behaved</subtitle>
 +
<subtitle id='01:51:14'>functional programming languages have the property that you can take any computation that has variables in it and</subtitle>
 +
<subtitle id='01:51:21'>through a fairly simple compilation change it into a network that has no</subtitle>
 +
<subtitle id='01:51:27'>variables whatsoever but simply routing x' for values does that sound please</subtitle>
 +
<subtitle id='01:51:33'>please interrupt me if that's it doesn't sound reasonable is that sound reason</subtitle>
 +
<subtitle id='01:51:38'>it's intuitively reasonable isn't it because what does a variable as a place</subtitle>
 +
<subtitle id='01:51:43'>you go to to get a value but of course you can what you really need in a</subtitle>
 +
<subtitle id='01:51:48'>computation is simply a value delivered you don't need the value to be anywhere except where the operator is so by using</subtitle>
 +
<subtitle id='01:51:56'>a combination of those techniques you can actually remarkably enough it's</subtitle>
 +
<subtitle id='01:52:07'>actually it's always surprising when these things work you can actually go to</subtitle>
 +
<subtitle id='01:52:12'>a thing that's an extreme generalization of a spreadsheet cell that does an</subtitle>
 +
<subtitle id='01:52:19'>enormous amount of parallel computation but in a way in which you see none of</subtitle>
 +
<subtitle id='01:52:24'>the interactions yourself</subtitle>
 +
<subtitle id='01:52:31'>now because of production production system it it's not at odds with the</subtitle>
 +
<subtitle id='01:52:37'>production system it's on this it's not like ops five as an example which is a</subtitle>
 +
<subtitle id='01:52:43'>production system I understand people use here it's basically it's orthogonal</subtitle>
 +
<subtitle id='01:52:50'>to whether there's a production system trying to do things or not</subtitle>
 +
<subtitle id='01:52:54'>ops five has an example in which the you</subtitle>
 +
<subtitle id='01:52:58'>have to order the rules yourself to a certain extent in order to in order to</subtitle>
 +
<subtitle id='01:53:03'>get efficiency and so forth and you can</subtitle>
 +
<subtitle id='01:53:08'>think of this as something which is independent of whether there are rules</subtitle>
 +
<subtitle id='01:53:12'>and I didn't say there are rules here what I said is that what we actually are</subtitle>
 +
<subtitle id='01:53:17'>interested in is whether there's whether there's a set of conditions that can</subtitle>
 +
<subtitle id='01:53:21'>deliver to me what I actually need one of the things you could implement with</subtitle>
 +
<subtitle id='01:53:26'>this idea is a production system I'm not</subtitle>
 +
<subtitle id='01:53:30'>but it doesn't lie it isn't particularly like a production system you could</subtitle>
 +
<subtitle id='01:53:34'>implement a production system using the idea though do you understand to say it just one it</subtitle>
 +
<subtitle id='01:53:42'>yeah because it because some production systems have to be executed in sorry</subtitle>
 +
<subtitle id='01:53:48'>we're getting killed for time we only have a half an hour so what I would like</subtitle>
 +
<subtitle id='01:53:52'>to suggest is that we just sit still while they change the tape is that okay</subtitle>
 +
<subtitle id='01:53:57'>should only take them 10 seconds</subtitle>
 +
<subtitle id='01:54:11'>I was brought up about what do you do</subtitle>
 +
<subtitle id='01:54:15'>with real time in fact what do you do with time and historically the first</subtitle>
 +
<subtitle id='01:54:28'>object-oriented programs that were done outside of machine code were done in a</subtitle>
 +
<subtitle id='01:54:33'>programming language called Simula and Simula had this way of looking at time</subtitle>
 +
<subtitle id='01:54:38'>the Simula he had</subtitle>
 +
<subtitle id='01:54:47'>a bunch of objects</subtitle>
 +
<subtitle id='01:54:53'>one for each entity that you're trying</subtitle>
 +
<subtitle id='01:54:57'>to model so the</subtitle>
 +
<subtitle id='01:55:05'>these guys might be modeling pipes</subtitle>
 +
<subtitle id='01:55:14'>and so forth and the blue the blue guys might be modeling reactors in a chemical</subtitle>
 +
<subtitle id='01:55:23'>plant or something like that but</subtitle>
 +
<subtitle id='01:55:27'>basically as far as seeing they're concerned they're all objects they're</subtitle>
 +
<subtitle id='01:55:31'>all trying to execute at once trying to</subtitle>
 +
<subtitle id='01:55:37'>get to the new trying to move advance the entire system time and they had this</subtitle>
 +
<subtitle id='01:55:44'>problem of if you have a system time the system clock that's going on</subtitle>
 +
<subtitle id='01:55:48'>how can you compute because you might</subtitle>
 +
<subtitle id='01:55:52'>actually run out of time for computing</subtitle>
 +
<subtitle id='01:55:57'>before you can actually advance to the next system time so what the similar people realize that they wanted to do</subtitle>
 +
<subtitle id='01:56:03'>was in between the system clock so</subtitle>
 +
<subtitle id='01:56:07'>system clock might be one and the next</subtitle>
 +
<subtitle id='01:56:13'>time any of these guys had to compute</subtitle>
 +
<subtitle id='01:56:17'>was two so what it would do is it would</subtitle>
 +
<subtitle id='01:56:23'>do all of the computing in between the</subtitle>
 +
<subtitle id='01:56:29'>ticks of the clock so the computing was actually outside the space of the simulation so Simula this is a non</subtitle>
 +
<subtitle id='01:56:36'>real-time situation simular running on a mainframe would compute an arbitrary</subtitle>
 +
<subtitle id='01:56:40'>amount in between each state change so</subtitle>
 +
<subtitle id='01:56:44'>guarantee that each as much as it could possibly do it would settle down the</subtitle>
 +
<subtitle id='01:56:48'>state of each one of these objects during this time when they were all in</subtitle>
 +
<subtitle id='01:56:53'>process as soon as that that had happened then it would say okay now I</subtitle>
 +
<subtitle id='01:56:57'>can go to the next time on the clock it is now - what do I have to do now then</subtitle>
 +
<subtitle id='01:57:02'>the clock could be frozen would compute like mad again advance the clock again</subtitle>
 +
<subtitle id='01:57:06'>now of course there's a huge conflict</subtitle>
 +
<subtitle id='01:57:10'>that's the way you generally do it when you're doing object-oriented program</subtitle>
 +
<subtitle id='01:57:14'>huge conflict between this and when you want to do real-time things because um</subtitle>
 +
<subtitle id='01:57:19'>real-time things you don't get to stop the clock the clock is moving along</subtitle>
 +
<subtitle id='01:57:25'>and of course one of the answers is if</subtitle>
 +
<subtitle id='01:57:29'>you don't have enough computing power to compute before the next time the clock</subtitle>
 +
<subtitle id='01:57:34'>ticks then you're dead anyway okay so let's assume that we have enough</subtitle>
 +
<subtitle id='01:57:38'>computing power and just to ask what we</subtitle>
 +
<subtitle id='01:57:42'>can do an object an object-oriented design to reconcile what time actually</subtitle>
 +
<subtitle id='01:57:49'>means and the way people generally think</subtitle>
 +
<subtitle id='01:57:54'>about time and object-oriented programming as time has entirely to do with who can view what when so it's a</subtitle>
 +
<subtitle id='01:58:02'>viewing operation so let's suppose we have our objects here and we have some</subtitle>
 +
<subtitle id='01:58:10'>views</subtitle>
 +
<subtitle id='01:58:18'>attached to the objects we can ask what</subtitle>
 +
<subtitle id='01:58:22'>is it like if one object is viewing another</subtitle>
 +
<subtitle id='01:58:30'>the first question I just should ask everybody this is absurdly simple once</subtitle>
 +
<subtitle id='01:58:37'>once you see it but the first question is when should I not be viewing the</subtitle>
 +
<subtitle id='01:58:42'>object when it's in transition right so</subtitle>
 +
<subtitle id='01:58:49'>it means I have to have at least a two-phase clock so the object really has</subtitle>
 +
<subtitle id='01:58:58'>two two states it's going in one is it's trying to settle itself to what it</subtitle>
 +
<subtitle id='01:59:02'>thinks as a stable state and the other one is one that's going to allow itself</subtitle>
 +
<subtitle id='01:59:06'>to be viewed okay so mmm let's we can do that and</subtitle>
 +
<subtitle id='01:59:11'>it's sort of a sort of a diagram here</subtitle>
 +
<subtitle id='01:59:19'>so here's the here's the object and</subtitle>
 +
<subtitle id='01:59:23'>here's the view so what we're saying is</subtitle>
 +
<subtitle id='01:59:27'>that when the object is computing we can't view and when the object is</subtitle>
 +
<subtitle id='01:59:34'>viewing we can't compute</subtitle>
 +
<subtitle id='01:59:45'>so we're gonna have a bunch of these little phases like this now that's not</subtitle>
 +
<subtitle id='01:59:53'>always useful sometimes this viewing</subtitle>
 +
<subtitle id='01:59:58'>thing is very long so the viewing can</subtitle>
 +
<subtitle id='02:00:02'>actually hold up the progress of the computation and so what can we do there</subtitle>
 +
<subtitle id='02:00:11'>this is suggested by actually this model so far just just curious to see if it</subtitle>
 +
<subtitle id='02:00:16'>suggests anybody what would be a good thing to do if to break this rigid</subtitle>
 +
<subtitle id='02:00:22'>synchrony we have what can you do yeah</subtitle>
 +
<subtitle id='02:00:27'>we could that's what's called slippage so we could actually arrange a slippage</subtitle>
 +
<subtitle id='02:00:32'>model so we let the as before as we had</subtitle>
 +
<subtitle id='02:00:37'>before we let the object compute and</subtitle>
 +
<subtitle id='02:00:41'>what we take is a copy of it that we let</subtitle>
 +
<subtitle id='02:00:47'>the viewer view</subtitle>
 +
<subtitle id='02:00:54'>and so the object in simulation can have an quite a number of phases as it goes</subtitle>
 +
<subtitle id='02:01:00'>along and every once in a while we get</subtitle>
 +
<subtitle id='02:01:07'>to view it</subtitle>
 +
<subtitle id='02:01:13'>we take let's say we take this guy right here okay now what's interesting is in</subtitle>
 +
<subtitle id='02:01:20'>an object-oriented system this slippage model is usually computed automatically</subtitle>
 +
<subtitle id='02:01:25'>by the the object in the view both of</subtitle>
 +
<subtitle id='02:01:29'>which are objects when you hook the view up to the object what they do is</subtitle>
 +
<subtitle id='02:01:34'>exchange information because one of the things that the object has some sense about is how long it takes it to settle</subtitle>
 +
<subtitle id='02:01:40'>it state typically the view has some sense about how long it takes to</subtitle>
 +
<subtitle id='02:01:44'>abstract the view and so they actually arrange and build a little buffer in</subtitle>
 +
<subtitle id='02:01:53'>between themselves and that buffer has the actual amount of information to</subtitle>
 +
<subtitle id='02:01:59'>allow the slippage to happen so the way this intertwines with doing real-time</subtitle>
 +
<subtitle id='02:02:03'>and deterministic computing is almost all real-time solutions to queuing</subtitle>
 +
<subtitle id='02:02:12'>problems knowing some sort of determinism they actually aren't</subtitle>
 +
<subtitle id='02:02:16'>completely deterministic what you usually do is you're saying I have some</subtitle>
 +
<subtitle id='02:02:20'>limits that I want to guarantee the</subtitle>
 +
<subtitle id='02:02:25'>computation is going to take place in between it I'm going to do enough buffering to make sure that those limits</subtitle>
 +
<subtitle id='02:02:30'>get down so for instance when you're doing real-time reading of records from</subtitle>
 +
<subtitle id='02:02:36'>Fast disks and so forth you set up buffer areas because you don't want to</subtitle>
 +
<subtitle id='02:02:42'>have to have real kind time constraints in every part of your real time</subtitle>
 +
<subtitle id='02:02:47'>computation in an object-oriented system these are usually handled by having</subtitle>
 +
<subtitle id='02:02:54'>what's called a viewing model small talk has one called models views and</subtitle>
 +
<subtitle id='02:02:58'>controllers which is quite general and has the facilities in it for generating</subtitle>
 +
<subtitle id='02:03:03'>all manner of slippage models in between by you putting on the outside what it is</subtitle>
 +
<subtitle id='02:03:09'>that you actually need to know from these objects at some point of course</subtitle>
 +
<subtitle id='02:03:13'>you can break it down there's no real time system you cannot break down but</subtitle>
 +
<subtitle id='02:03:18'>this gives you the maximum amount of automatic buffering that the system can</subtitle>
 +
<subtitle id='02:03:22'>generate without having to be explicitly programmed</subtitle>
 +
<subtitle id='02:03:27'>yeah very very large how can you well</subtitle>
 +
<subtitle id='02:03:51'>the way that's usually done is by trying to again it's that you know the stuff</subtitle>
 +
<subtitle id='02:03:57'>isn't a panacea but what you usually try and do is when you write a device driver</subtitle>
 +
<subtitle id='02:04:04'>in an object-oriented language what you try and do is ask what devices are</subtitle>
 +
<subtitle id='02:04:09'>likely to be like this device now what is this like so when you write when</subtitle>
 +
<subtitle id='02:04:17'>people do a user interface and an object-oriented language usually they</subtitle>
 +
<subtitle id='02:04:21'>don't write a driver for the mouse or for a tablet or anything else what they</subtitle>
 +
<subtitle id='02:04:25'>come up with is an abstraction of what it means to it's usually call a pick</subtitle>
 +
<subtitle id='02:04:30'>device it's an abstraction of what it means to be able to do selection and</subtitle>
 +
<subtitle id='02:04:35'>tracking and then one programmer at one</subtitle>
 +
<subtitle id='02:04:39'>time writes code for that and then if you come up in a system and it has a</subtitle>
 +
<subtitle id='02:04:44'>specific device you may have to write a line or two of additional code but it's</subtitle>
 +
<subtitle id='02:04:48'>written in a subclass below that the main driver is already written already</subtitle>
 +
<subtitle id='02:04:52'>been written in it's um it's not just doesn't just serve as the code for what</subtitle>
 +
<subtitle id='02:04:56'>you're doing it serves as the model for how you treat the actual devices when</subtitle>
 +
<subtitle id='02:05:01'>they're put in there so I'm part of the part of the the charm of the system is</subtitle>
 +
<subtitle id='02:05:07'>to be able to get away from the from the particular as much as possible and</subtitle>
 +
<subtitle id='02:05:13'>program as much as possible in the general case the whole act of</subtitle>
 +
<subtitle id='02:05:20'>subclassing is basically saying to something I want something just like you accept and the theory behind this which</subtitle>
 +
<subtitle id='02:05:28'>seems to work is that it is much easier to program differentially than it is to</subtitle>
 +
<subtitle id='02:05:32'>program from scratch it's much easier if you see something that is like what you</subtitle>
 +
<subtitle id='02:05:36'>want and you can get it in a way that um doesn't damage anything</subtitle>
 +
<subtitle id='02:05:42'>else then if all you could make have to make as incremental changes to it then</subtitle>
 +
<subtitle id='02:05:47'>you should be way ahead that's not always true you know there are always</subtitle>
 +
<subtitle id='02:05:53'>pathological cases always pathological cases but generally speaking like this</subtitle>
 +
<subtitle id='02:05:58'>is an example where the whole strategy once it was thought out was realized oh</subtitle>
 +
<subtitle id='02:06:04'>yeah this is something we can use it's not just for user interfaces we can use it for every kind of device drivers we</subtitle>
 +
<subtitle id='02:06:09'>can use it for every kind of real-time stuff where we have two different clocks</subtitle>
 +
<subtitle id='02:06:14'>going at two different rates and we're trying to synchronize in some way why</subtitle>
 +
<subtitle id='02:06:18'>should we have to write this over and over again why should some program we have to figure it out over and over</subtitle>
 +
<subtitle id='02:06:23'>again it's not that we have the solution to every possible problem but what we're saying is we've got a solution it's the</subtitle>
 +
<subtitle id='02:06:29'>80/20 rule get a solution to the eightieth you know 80% of all of the</subtitle>
 +
<subtitle id='02:06:34'>code you're ever going to have to write if you can put that into a superclass</subtitle>
 +
<subtitle id='02:06:39'>and then distribute it automatically as part of the solution so small so small</subtitle>
 +
<subtitle id='02:06:43'>that when you when you're doing a viewing operation and small talk you</subtitle>
 +
<subtitle id='02:06:48'>don't even have to think to yourself whether you should worry about</subtitle>
 +
<subtitle id='02:06:52'>synchronization or not until long after</subtitle>
 +
<subtitle id='02:06:56'>you may decide that you need it then you just have it oh it's already in here I just got it for free when I subclass the</subtitle>
 +
<subtitle id='02:07:01'>class view well try think like I say an</subtitle>
 +
<subtitle id='02:07:06'>ADA it's a little bit harder because you can't do those super classes that have</subtitle>
 +
<subtitle id='02:07:10'>all those goodies lying in there you have to you can do it with a macro</subtitle>
 +
<subtitle id='02:07:14'>operation people do to super classing and ADA by making macros that allow them</subtitle>
 +
<subtitle id='02:07:21'>to do a kind of copying and stuff</subtitle>
 +
<subtitle id='02:07:48'>No well in small talk no you can small</subtitle>
 +
<subtitle id='02:07:53'>talk allows you to dynamic basically small talk has no concept of loading</subtitle>
 +
<subtitle id='02:07:59'>code so everything is there dynamically into there and at any point</subtitle>
 +
<subtitle id='02:08:05'>you can go in examine any piece of code in the system you can rewrite any piece</subtitle>
 +
<subtitle id='02:08:09'>of code in a production case you really don't want to allow just anybody to go</subtitle>
 +
<subtitle id='02:08:15'>in and rewrite a superclass because of</subtitle>
 +
<subtitle id='02:08:19'>course the work it's really bad if they if the superclass starts doing something</subtitle>
 +
<subtitle id='02:08:24'>different generally when people go to rewrite a super classes to improve the algorithm</subtitle>
 +
<subtitle id='02:08:29'>that hundreds of applications are already using like you may go in and</subtitle>
 +
<subtitle id='02:08:34'>improve the sort algorithm yeah</subtitle>
 +
<subtitle id='02:08:51'>right that's why I was talking about the</subtitle>
 +
<subtitle id='02:08:55'>configuration so my belief is that in a production case you must have something</subtitle>
 +
<subtitle id='02:09:00'>like the configuration setup or else</subtitle>
 +
<subtitle id='02:09:05'>it's just too fragile it's not it's it's</subtitle>
 +
<subtitle id='02:09:09'>fragile in a funny way because in small talk we used to give $5 bills away to</subtitle>
 +
<subtitle id='02:09:15'>anybody who could crash the Smalltalk system it's very hard to crash an a good</subtitle>
 +
<subtitle id='02:09:21'>object-oriented system because there isn't anything you can get to that where you can actually hurt more than one</subtitle>
 +
<subtitle id='02:09:26'>layer of thing and then the system's says hey wait a minute what are you</subtitle>
 +
<subtitle id='02:09:30'>doing like in the small talk debugger as</subtitle>
 +
<subtitle id='02:09:34'>you'll discover I think there's a tutorial coming up has the anytime</subtitle>
 +
<subtitle id='02:09:38'>there's any kind of an error the system</subtitle>
 +
<subtitle id='02:09:42'>doesn't crash there was there's no concept of crashing the error is simply</subtitle>
 +
<subtitle id='02:09:47'>set aside as just another process and once when we were debugging the system</subtitle>
 +
<subtitle id='02:09:52'>we found 1,700 suspended errors waiting</subtitle>
 +
<subtitle id='02:09:57'>for somebody to take care of them and so I'll talk didn't care you know it's just an error comes up fine you know um set</subtitle>
 +
<subtitle id='02:10:04'>it aside it's right there you can go back to it anytime you want but keep on running it just keeps on running so the</subtitle>
 +
<subtitle id='02:10:11'>that's one of the reasons why we didn't do a configuration language because we</subtitle>
 +
<subtitle id='02:10:15'>were programming in the small and you couldn't hurt yourself so as the the worst he could have</subtitle>
 +
<subtitle id='02:10:20'>happened was something annoying they would come up but it wouldn't crash what</subtitle>
 +
<subtitle id='02:10:25'>you're doing so somebody who fixed it or make a note of it but I think that's</subtitle>
 +
<subtitle id='02:10:29'>intolerable in the production sense</subtitle>
 +
<subtitle id='02:10:33'>where you really don't well you have people who aren't part of the same group</subtitle>
 +
<subtitle id='02:10:38'>and so forth that you really have to have a configurations language and the super classes are the ones that you want</subtitle>
 +
<subtitle id='02:10:43'>to have most understood and most nailed down in particular the for instance in</subtitle>
 +
<subtitle id='02:10:53'>small talk it's often to make things like the sorting stuff parametric so</subtitle>
 +
<subtitle id='02:11:00'>you're actually sending in sorting objects that will do sorting for you</subtitle>
 +
<subtitle id='02:11:05'>as parameters rather than even putting</subtitle>
 +
<subtitle id='02:11:09'>that in embedding that into the the code just because you don't want somebody to</subtitle>
 +
<subtitle id='02:11:13'>try and change it that way you'd rather have it be something separate that you</subtitle>
 +
<subtitle id='02:11:17'>can dynamically bind in really good superclasses don't do much except act as</subtitle>
 +
<subtitle id='02:11:23'>really good binding mechanisms for other</subtitle>
 +
<subtitle id='02:11:27'>stuff that's going on</subtitle>
 +
<subtitle id='02:11:39'>yeah</subtitle>
 +
<subtitle id='02:11:43'>yes there is you can but again the the</subtitle>
 +
<subtitle id='02:11:48'>original the original small talk for example didn't use a kind of procedure</subtitle>
 +
<subtitle id='02:11:53'>call in order to send it really acted as</subtitle>
 +
<subtitle id='02:11:57'>though you're on a network and if you're interested in what order things had to</subtitle>
 +
<subtitle id='02:12:03'>be done in they they could actually be stamped and recued at the other end and</subtitle>
 +
<subtitle id='02:12:09'>people do do that when when you run small talk over the network people make</subtitle>
 +
<subtitle id='02:12:15'>the connection to the network by having what are called phantom objects and a</subtitle>
 +
<subtitle id='02:12:20'>phantom object is a stand-in from the object you're trying to send the net right because you're always sending a</subtitle>
 +
<subtitle id='02:12:24'>message to something so suppose yours suppose your</subtitle>
 +
<subtitle id='02:12:39'>so if you're over here and you think</subtitle>
 +
<subtitle id='02:12:45'>you're sending a message what you think you're doing is sending a message from</subtitle>
 +
<subtitle id='02:12:49'>object a to object B and but they may be</subtitle>
 +
<subtitle id='02:12:53'>on different machines and so what may be really going on is object a is sending a</subtitle>
 +
<subtitle id='02:13:01'>version of object B</subtitle>
 +
<subtitle id='02:13:11'>which is really going over the network to the real be again these are called</subtitle>
 +
<subtitle id='02:13:18'>Panem objects and usually there's just one class of them and whatever you're</subtitle>
 +
<subtitle id='02:13:24'>distributing a copy a computation usually the environment for the objects</subtitle>
 +
<subtitle id='02:13:31'>just consists of a few local objects and</subtitle>
 +
<subtitle id='02:13:35'>the rest of them are phantom objects the phantom objects take care of all the the network stuff and synchronizations and</subtitle>
 +
<subtitle id='02:13:43'>reorderings and other kinds of things that you have to do when you're going to slower slower media that's a</subtitle>
 +
<subtitle id='02:13:49'>well-established technique and any good object-oriented language you can set</subtitle>
 +
<subtitle id='02:13:53'>that up literally in an afternoon today</subtitle>
 +
<subtitle id='02:13:57'>oh it's quite instructive to think about what it means not to send just a message</subtitle>
 +
<subtitle id='02:14:02'>but to send an object from one place to another what part of its environment do you have to bring along with it in order</subtitle>
 +
<subtitle id='02:14:08'>for it to be understood see in theory sending an object let's say we send</subtitle>
 +
<subtitle id='02:14:14'>objects see across</subtitle>
 +
<subtitle id='02:14:20'>well si may not be terribly understood</subtitle>
 +
<subtitle id='02:14:24'>on the other side on the other hand it's still active so if your network has the</subtitle>
 +
<subtitle id='02:14:31'>rule as ours did it park that whatever an object shows up and its class isn't</subtitle>
 +
<subtitle id='02:14:36'>there its class a clone of its class</subtitle>
 +
<subtitle id='02:14:40'>gets sucked over with it so you compare</subtitle>
 +
<subtitle id='02:14:44'>that to sending a data structure which is sending bits and how fragile they are</subtitle>
 +
<subtitle id='02:14:50'>because you're not sure that there are procedures at the other end to know them here you're ensuring that either nothing</subtitle>
 +
<subtitle id='02:14:55'>at all happens or the right procedures are actually automatically sent along</subtitle>
 +
<subtitle id='02:14:59'>and so you can it's remember that story I told the beginning of the Vosges 220</subtitle>
 +
<subtitle id='02:15:04'>that's exactly how the training command protected their their tapes you just</subtitle>
 +
<subtitle id='02:15:09'>make sure the procedures go along with them and it's quite easy using these</subtitle>
 +
<subtitle id='02:15:13'>phantom objects to make that automatic so you can think of the network of</subtitle>
 +
<subtitle id='02:15:18'>objects as constantly rebalancing itself as to where the code actually is</subtitle>
 +
<subtitle id='02:15:35'>I think I believe that's true and from</subtitle>
 +
<subtitle id='02:15:42'>Park yeah it's written it's been written up</subtitle>
 +
<subtitle id='02:15:49'>yeah well my message to you is this is the same reason I told you the Arthur</subtitle>
 +
<subtitle id='02:15:53'>Andersen story is they have exactly the same you know their their attitude to me</subtitle>
 +
<subtitle id='02:16:01'>was kind of interesting they said they went to several phases and this is</subtitle>
 +
<subtitle id='02:16:05'>probably you're in one of these phases right now as well it went through one</subtitle>
 +
<subtitle id='02:16:09'>phase where the first phase with objects it was like magic God all the things you</subtitle>
 +
<subtitle id='02:16:14'>could do code is so small the second phase was complete disillusionment when</subtitle>
 +
<subtitle id='02:16:19'>they realize that for instance small talk which they were using as a model</subtitle>
 +
<subtitle id='02:16:23'>didn't scale they said you know what is you know is this the emperor's new</subtitle>
 +
<subtitle id='02:16:28'>clothes or what and I said no it's just because the part of the reason small</subtitle>
 +
<subtitle id='02:16:34'>talk wasn't built to scale was simply because we were able to do an enormous</subtitle>
 +
<subtitle id='02:16:39'>amount with very tiny programs and we're</subtitle>
 +
<subtitle id='02:16:43'>designing for children anyway and when</subtitle>
 +
<subtitle id='02:16:47'>you want to use these ideas and they're in the in the large I believe that you</subtitle>
 +
<subtitle id='02:16:51'>have to do a little bit more then you can go out on the street and buy that's</subtitle>
 +
<subtitle id='02:16:55'>what I'm my message to you is that and</subtitle>
 +
<subtitle id='02:17:00'>it was to Arthur Anderson that you know a lot about what it can once you've</subtitle>
 +
<subtitle id='02:17:05'>learned the object-oriented style which I believe is the right way a protecting</subtitle>
 +
<subtitle id='02:17:09'>state of the right way of making components the right way of making urns</subtitle>
 +
<subtitle id='02:17:14'>superclasses right way of sharing there's a whole bunch of right things about it in order to make it work in the</subtitle>
 +
<subtitle id='02:17:20'>large you then have to sit down and protect that by coming up with a</subtitle>
 +
<subtitle id='02:17:25'>configuration language and you can do yourself a lot of good by doing that</subtitle>
 +
<subtitle id='02:17:30'>carefully because the configuration language can include languages that you</subtitle>
 +
<subtitle id='02:17:34'>already have hundreds of programmers that know how to write in in other words</subtitle>
 +
<subtitle id='02:17:39'>the configuration language can be a way of protecting programs that are already</subtitle>
 +
<subtitle id='02:17:44'>written in COBOL and Fortran as well as</subtitle>
 +
<subtitle id='02:17:48'>new programs written in Ada it should be a really separate way you think of isn't</subtitle>
 +
<subtitle id='02:17:52'>and the architecture is opposed to the bricks of actually building the thing</subtitle>
 +
<subtitle id='02:17:57'>the architecture to me rules life is an architecture it wasn't</subtitle>
 +
<subtitle id='02:18:02'>as early as the turn of the century there are people that thought memory there's the stuff called protoplasm</subtitle>
 +
<subtitle id='02:18:07'>written about in books was supposed to</subtitle>
 +
<subtitle id='02:18:11'>be some special kind of material that you can build living things out of because people didn't believe that</subtitle>
 +
<subtitle id='02:18:16'>ordinary chemicals could bake you could make a living thing out of it wasn't</subtitle>
 +
<subtitle id='02:18:21'>really until 20 or 30 years ago that it was really shown quite definitively that</subtitle>
 +
<subtitle id='02:18:28'>we actually are just an architecture in fact we know now that the atoms in our</subtitle>
 +
<subtitle id='02:18:33'>body are actually recycled about every seven years so you and I as individuals</subtitle>
 +
<subtitle id='02:18:39'>are patterns in space the material is moving through we don't have the same</subtitle>
 +
<subtitle id='02:18:45'>atoms in our bodies that we had seven years ago we are a pattern and</subtitle>
 +
<subtitle id='02:18:50'>interesting things made out of the patterns you have - you know I have to</subtitle>
 +
<subtitle id='02:18:55'>have some understanding of the bricks and stuff which I think everybody is getting now but at some point you'll</subtitle>
 +
<subtitle id='02:19:00'>realize that the power of this stuff isn't from what the bricks do and that</subtitle>
 +
<subtitle id='02:19:04'>the bricks are have integrity the power</subtitle>
 +
<subtitle id='02:19:08'>of the stuff is from the architectures that you can create and the</subtitle>
 +
<subtitle id='02:19:12'>architectures have just been scratched now up until really a couple of years</subtitle>
 +
<subtitle id='02:19:19'>ago there probably been less than a god I don't know 100 or 200 people over two</subtitle>
 +
<subtitle id='02:19:24'>decades actually doing this stuff so</subtitle>
 +
<subtitle id='02:19:28'>it's the and the problems that have been</subtitle>
 +
<subtitle id='02:19:32'>worked on have tended to be small the reason I believe that object-oriented</subtitle>
 +
<subtitle id='02:19:36'>programming works well in the large is simply because it works well in the</subtitle>
 +
<subtitle id='02:19:40'>biological world and I see no reason why it is going to fall down in any way when</subtitle>
 +
<subtitle id='02:19:46'>we go large but in order to in order to make it work we have to either look at</subtitle>
 +
<subtitle id='02:19:51'>the biological world war which is the</subtitle>
 +
<subtitle id='02:19:55'>biological reason of urging can a configuration language or we have to go</subtitle>
 +
<subtitle id='02:19:59'>after for other reasons of just realizing hey this stuff gets fragile at</subtitle>
 +
<subtitle id='02:20:03'>this point what do we actually need and the answer is a configuration language</subtitle>
 +
<subtitle id='02:20:14'>but I think that there might be some immediate benefit these ideas of</subtitle>
 +
<subtitle id='02:20:20'>object-oriented design where you have existing systems that because it would</subtitle>
 +
<subtitle id='02:20:26'>nature the islands of automation approach have gotten tremendous ly complex and you</subtitle>
 +
<subtitle id='02:20:32'>need to be able to characterize various things possibly the concept of objects</subtitle>
 +
<subtitle id='02:20:38'>to help you do that and to help them understand what are the objects of one</subtitle>
 +
<subtitle id='02:20:43'>of the Linc right well I'm trying to think of it was</subtitle>
 +
<subtitle id='02:20:51'>Rudolph's irken that said you can't if you want to be a piano player you should</subtitle>
 +
<subtitle id='02:20:55'>spend half of your time reading books and his his point was is that if you</subtitle>
 +
<subtitle id='02:21:02'>spend all of your time just learning to move your fingers you have not absorbed</subtitle>
 +
<subtitle id='02:21:07'>any contact the context necessary to play any real piece of music that</subtitle>
 +
<subtitle id='02:21:11'>there's there's something else besides the practical application of the of the</subtitle>
 +
<subtitle id='02:21:16'>technique and I think that the somebody was asking me at the break it was a very</subtitle>
 +
<subtitle id='02:21:21'>good question actually which is and the</subtitle>
 +
<subtitle id='02:21:26'>it had to do with she doesn't sounds</subtitle>
 +
<subtitle id='02:21:30'>like objects make you do a lot of design and anyway but you know it wasn't said</subtitle>
 +
<subtitle id='02:21:37'>stupidly at all it's just said isn't that hard and I said yes it is hard and</subtitle>
 +
<subtitle id='02:21:43'>it's hard whether you've got objects or not the main reason is that objects</subtitle>
 +
<subtitle id='02:21:48'>provide both an excuse for designing and they also give you a framework for</subtitle>
 +
<subtitle id='02:21:52'>holding the design every little bit of design you do you get rewarded in an</subtitle>
 +
<subtitle id='02:21:57'>object-oriented system for having done it you really get rewarded where's it's</subtitle>
 +
<subtitle id='02:22:02'>hard to get rewarded in a in a procedure data structure system because often the</subtitle>
 +
<subtitle id='02:22:07'>design has nothing to hang itself on there can be local good things but you</subtitle>
 +
<subtitle id='02:22:12'>can't propagate the design forward the way you can in an object-oriented system</subtitle>
 +
<subtitle id='02:22:21'>I don't know because I haven't hung most</subtitle>
 +
<subtitle id='02:22:25'>you know Edward de Bono's says the problem with most American companies is</subtitle>
 +
<subtitle id='02:22:29'>that when they get in trouble they redouble their efforts so you know the</subtitle>
 +
<subtitle id='02:22:36'>idea is that we're basically too industrious for our own good and once we learn a technique we tend to put our</subtitle>
 +
<subtitle id='02:22:41'>head down and just fight like mad rather than trying to smart our way out of it</subtitle>
 +
<subtitle id='02:22:45'>like I said I particularly efference to</subtitle>
 +
<subtitle id='02:22:49'>me I had actually seen these techniques and actually programs using some of these techniques for five years for a</subtitle>
 +
<subtitle id='02:22:54'>period between 1961 and 1966 before</subtitle>
 +
<subtitle id='02:23:01'>Simula hit me on the head and hit me on the head just because at that point I</subtitle>
 +
<subtitle id='02:23:06'>had a problem that was much harder than I wanted to program it was the first</subtitle>
 +
<subtitle id='02:23:10'>time I was willing to actually see that was when I was going through insane</subtitle>
 +
<subtitle id='02:23:14'>minutes and I said to myself holy cow this is so you know there's just nothing</subtitle>
 +
<subtitle id='02:23:20'>here all I have to do is this and that I'm done you know all of these things</subtitle>
 +
<subtitle id='02:23:25'>fall in I was actually programmed in the game of space war you know which is one</subtitle>
 +
<subtitle id='02:23:30'>of the first video games but it wasn't even a video game back in the in the 60s</subtitle>
 +
<subtitle id='02:23:34'>and they're all of these it's very hard to do in an ordinary language because you have all of these spaceships and you</subtitle>
 +
<subtitle id='02:23:39'>have planets and you have torpedoes and when I was looking at Simula I was</subtitle>
 +
<subtitle id='02:23:44'>trying to get figure a way out of doing</subtitle>
 +
<subtitle id='02:23:48'>this I didn't want to do it in 30 pages of alcohol or so and I was trying to</subtitle>
 +
<subtitle id='02:23:53'>figure out a way and all of a sudden it occurred to me that every single thing in space war and Simula was the same</subtitle>
 +
<subtitle id='02:23:59'>thing the only thing was different was the costume they were wearing the</subtitle>
 +
<subtitle id='02:24:03'>planets were the same the spaceships were the same the torpedoes were the</subtitle>
 +
<subtitle id='02:24:07'>same there was like one line of code difference in each of their behavior and</subtitle>
 +
<subtitle id='02:24:11'>they all had to obey Newton's laws they all were interacting with each others in</subtitle>
 +
<subtitle id='02:24:15'>exactly the same way it was trivial and I wrote that program and a half a page</subtitle>
 +
<subtitle id='02:24:19'>of code and I never looked back since because the you know the that is the</subtitle>
 +
<subtitle id='02:24:25'>thing if you don't find this folding up of complexity into simplicity then</subtitle>
 +
<subtitle id='02:24:32'>either you're working on a truly hard problem which really really do exist</subtitle>
 +
<subtitle id='02:24:38'>or there's probably a rotation of the situation that you haven't examined yet</subtitle>
 +
<subtitle id='02:24:43'>you're probably still thinking the old way in thinking in terms of particulars</subtitle>
 +
<subtitle id='02:24:48'>rather than generalities we're so used to programming up each specific thing</subtitle>
 +
<subtitle id='02:24:52'>that's hard for us to think of avoiding that then we only have to to program up</subtitle>
 +
<subtitle id='02:24:57'>one general thing and then write a couple of lines of code for each of the</subtitle>
 +
<subtitle id='02:25:01'>particulars and we're done that's a really good test in this stuff and it</subtitle>
 +
<subtitle id='02:25:07'>accounts for the religious fervor of people who have had this happen to</subtitle>
 +
<subtitle id='02:25:11'>themselves as after pounding your head away on a system to have it fold up like</subtitle>
 +
<subtitle id='02:25:15'>like there was nothing there it is the most amazing thing they have an</subtitle>
 +
<subtitle id='02:25:20'>operating system go away to something that is practically a clock which is</subtitle>
 +
<subtitle id='02:25:25'>what it is in an object-oriented system because what do you need in an operating system well once you've got the ability</subtitle>
 +
<subtitle id='02:25:30'>to sustain objects and stuff like that you practically only need a clock you</subtitle>
 +
<subtitle id='02:25:34'>only need to get control routed around and everything else is written essentially as an application on top of</subtitle>
 +
<subtitle id='02:25:40'>that kernel that's a very modern way of looking at things and it's a terrific</subtitle>
 +
<subtitle id='02:25:44'>way of thinking about doing stuff</subtitle>
 +
<subtitle id='02:25:56'>okay yeah</subtitle>
 +
<subtitle id='02:26:00'>that's a very good question some of these idea a relational database</subtitle>
 +
<subtitle id='02:26:08'>everybody knows what a relational database is right okay so the the there</subtitle>
 +
<subtitle id='02:26:16'>are several things a relational data an item in a relational database has fields</subtitle>
 +
<subtitle id='02:26:24'>it has some of some of the things and depending on the data dictionary that</subtitle>
 +
<subtitle id='02:26:28'>the relational database wants to sustain you can occasionally do some integrity</subtitle>
 +
<subtitle id='02:26:33'>constraints the most relational database is friend for example is very difficult</subtitle>
 +
<subtitle id='02:26:37'>to do the following thing in a data record and that is make sure that Joe</subtitle>
 +
<subtitle id='02:26:42'>blows age is always the right one when you ask it because when you ask</subtitle>
 +
<subtitle id='02:26:47'>somebody's age in a relational database what it expects to do is to go to a</subtitle>
 +
<subtitle id='02:26:51'>field and find a number and bring it back to you right in an object system</subtitle>
 +
<subtitle id='02:26:58'>what you would have there is you'd sent the message age to the object and it</subtitle>
 +
<subtitle id='02:27:05'>could just go to a field and bring back a number but a smarter one would</subtitle>
 +
<subtitle id='02:27:09'>actually look at the guy's birthdate and compute his age for you right then and</subtitle>
 +
<subtitle id='02:27:15'>so you'd always get the right answer every time you asked aged you would</subtitle>
 +
<subtitle id='02:27:19'>always get the right answer from the object you would not get it from the relational database unless you're doing</subtitle>
 +
<subtitle id='02:27:24'>careful updates that's one difference</subtitle>
 +
<subtitle id='02:27:28'>the other difference is that in a in a relate in any kind of a relation it is</subtitle>
 +
<subtitle id='02:27:35'>extremely difficult to embed code although people sometimes do by</subtitle>
 +
<subtitle id='02:27:39'>embedding it on the outside of the database rather than on the inside with</subtitle>
 +
<subtitle id='02:27:44'>it so for doing a dynamic simulation for instance is quite difficult a good way</subtitle>
 +
<subtitle id='02:27:49'>of understanding where relational databases is going to go comes out of</subtitle>
 +
<subtitle id='02:27:53'>one of your own products and an industry that McDonnell Douglas is one of the</subtitle>
 +
<subtitle id='02:27:58'>leaders in Amanda's CAD CAM CAD cam can't be done on relational straight</subtitle>
 +
<subtitle id='02:28:05'>relational databases there simply aren't enough hooks in there to deal with all</subtitle>
 +
<subtitle id='02:28:09'>the things it's not you can't store the data so you can't deal with all the</subtitle>
 +
<subtitle id='02:28:13'>other things that the relational database database can't store that</subtitle>
 +
<subtitle id='02:28:18'>cad/cam requires so object-oriented</subtitle>
 +
<subtitle id='02:28:23'>servers like the gemstone or this the</subtitle>
 +
<subtitle id='02:28:27'>ontological rated servers are ones that</subtitle>
 +
<subtitle id='02:28:32'>the CAD cam industry is going towards now these allow you to do all the things</subtitle>
 +
<subtitle id='02:28:36'>that you're used to doing with relational database but also give you this extra level of abstraction that you</subtitle>
 +
<subtitle id='02:28:43'>get from objects what's nice about it I think for people worried about</subtitle>
 +
<subtitle id='02:28:48'>transitions is that there's a fairly reasonable transition almost everything gets better when you go to an</subtitle>
 +
<subtitle id='02:28:53'>object-oriented database server for instance I think most people would like</subtitle>
 +
<subtitle id='02:28:59'>for instance to have joins be real</subtitle>
 +
<subtitle id='02:29:03'>things rather than a made-up thing for</subtitle>
 +
<subtitle id='02:29:07'>the moment and they can be in an object-oriented database most people</subtitle>
 +
<subtitle id='02:29:11'>would like to have views be things that you can add it back through or views</subtitle>
 +
<subtitle id='02:29:15'>that you can view whereas a view in a</subtitle>
 +
<subtitle id='02:29:19'>relational database is an extremely weak notion of the whole notion of what view</subtitle>
 +
<subtitle id='02:29:24'>is where in an object-oriented system is extremely easy to have a view look like</subtitle>
 +
<subtitle id='02:29:29'>the set of stuff itself and so you can put another view on top of it and</subtitle>
 +
<subtitle id='02:29:33'>cascade them and so forth and all of those things are being done right at</subtitle>
 +
<subtitle id='02:29:38'>this moment with object-oriented servers</subtitle>
 +
<subtitle id='02:29:47'>excuse me yeah I think for also because</subtitle>
 +
<subtitle id='02:29:59'>the the tutorial it's going to happen in a couple of weeks is going to be one of the people from this digital company the</subtitle>
 +
<subtitle id='02:30:05'>company that does small talk V I want to just mention again that besides the fact</subtitle>
 +
<subtitle id='02:30:12'>that it's cheap small talk V I think is only $99 on the IBM PC and 150 on the</subtitle>
 +
<subtitle id='02:30:18'>Mac so it's the cheapest small talk they have by far the best manual none of the</subtitle>
 +
<subtitle id='02:30:24'>other manuals are even in second place because they actually don't believe that</subtitle>
 +
<subtitle id='02:30:30'>you understand about object-oriented programming in the beginning of the</subtitle>
 +
<subtitle id='02:30:34'>thing they actually write the manual there's a splendid tutorial hands-on tutorial for getting versed with all of</subtitle>
 +
<subtitle id='02:30:40'>the object-oriented lore and sub-classing and building a very</subtitle>
 +
<subtitle id='02:30:45'>powerful little application another thing that they give you for free in</subtitle>
 +
<subtitle id='02:30:51'>with small talk I don't have any stock in the company I haven't made a cent on</subtitle>
 +
<subtitle id='02:30:56'>small talk but what they do is they also</subtitle>
 +
<subtitle id='02:31:00'>give you for free a full-blown implementation of Prolog Edinboro Prolog</subtitle>
 +
<subtitle id='02:31:06'>written in small talk okay and just to</subtitle>
 +
<subtitle id='02:31:13'>give you an idea this whole implementation of Prolog written in small talk with its own user interface</subtitle>
 +
<subtitle id='02:31:17'>its own browser its own debugger and everything else is less than 20 pages of</subtitle>
 +
<subtitle id='02:31:21'>code okay and if you've ever tried doing</subtitle>
 +
<subtitle id='02:31:25'>anything like a programming language like this is a convince err okay and it</subtitle>
 +
<subtitle id='02:31:30'>uses object-oriented programming for what it's really it uses the fact for</subtitle>
 +
<subtitle id='02:31:35'>instance in small talk everything is an object everything is an object and</subtitle>
 +
<subtitle id='02:31:40'>protected including the things that you think of as stack frames and ordinary</subtitle>
 +
<subtitle id='02:31:44'>languages that you can't even get to how is it the bugger written in small talk</subtitle>
 +
<subtitle id='02:31:48'>well this stack frame is simply an object so you simply write a method that</subtitle>
 +
<subtitle id='02:31:53'>allows you to ask the guy well what do you what do you have here what do you</subtitle>
 +
<subtitle id='02:31:57'>have here can you advance your PC what see I mean I mean the debugger is like a</subtitle>
 +
<subtitle id='02:32:03'>page and a half long because it actually is part of it's just a subclass of class</subtitle>
 +
<subtitle id='02:32:09'>stack frame prologue is so simple in small type because they actually take</subtitle>
 +
<subtitle id='02:32:14'>the stack frame as an object and implement prologues control structure</subtitle>
 +
<subtitle id='02:32:19'>directly in using the small talk using</subtitle>
 +
<subtitle id='02:32:23'>small talk sone stack frames but using a non stack protocol which is what the</subtitle>
 +
<subtitle id='02:32:28'>Prolog backtracking requires this is gorgeous stuff and it's done completely</subtitle>
 +
<subtitle id='02:32:32'>without impinging on the integrity of</subtitle>
 +
<subtitle id='02:32:36'>small talk itself the two systems are integrated together and so you can do</subtitle>
 +
<subtitle id='02:32:41'>Prolog unifications into small talk variables and vice versa so it's a</subtitle>
 +
<subtitle id='02:32:47'>perfect example of what an embedded system in an object-oriented system looks like they give it to you for free</subtitle>
 +
<subtitle id='02:32:52'>you can do real work in it if you just want to use it but people are really</subtitle>
 +
<subtitle id='02:32:56'>interested in why this stuff is powerful that's an example of where the power of</subtitle>
 +
<subtitle id='02:33:02'>it is actually concentrated and used by some design thinking here's another one</subtitle>
 +
<subtitle id='02:33:08'>most object-oriented languages don't</subtitle>
 +
<subtitle id='02:33:12'>have a complete model so for instance</subtitle>
 +
<subtitle id='02:33:16'>when Simula for instance has classes so</subtitle>
 +
<subtitle id='02:33:21'>you have a class paragraph or a class</subtitle>
 +
<subtitle id='02:33:25'>string but Simula doesn't have classes</subtitle>
 +
<subtitle id='02:33:29'>be objects so if you have an object-oriented one of the choices you</subtitle>
 +
<subtitle id='02:33:34'>could make is to have everything in the language be an object why not that means</subtitle>
 +
<subtitle id='02:33:38'>if there are things called classes there</subtitle>
 +
<subtitle id='02:33:42'>must be a class class a class whose instances are the classes okay that</subtitle>
 +
<subtitle id='02:33:50'>sound shaky let me just let me just draw it cuz it's</subtitle>
 +
<subtitle id='02:34:09'>so I'm going to draw classes in red so</subtitle>
 +
<subtitle id='02:34:15'>this might be integer might be fraction</subtitle>
 +
<subtitle id='02:34:21'>might be paragraph this might be document this might be file and there</subtitle>
 +
<subtitle id='02:34:29'>are instances I'll draw in green this might be three and this might be for</subtitle>
 +
<subtitle id='02:34:34'>this might be three quarters this is a</subtitle>
 +
<subtitle id='02:34:40'>paragraph of text and so is this one</subtitle>
 +
<subtitle id='02:34:44'>this is a whole document this is a whole file here's another one they have lots</subtitle>
 +
<subtitle id='02:34:51'>of instances of these classes they've been on Simula these red things in an</subtitle>
 +
<subtitle id='02:34:56'>ADA these red things aren't around at runtime they're like macros they just help</subtitle>
 +
<subtitle id='02:35:02'>create the structures underneath that these green guys can work with but in</subtitle>
 +
<subtitle id='02:35:07'>small talk these are really objects and</subtitle>
 +
<subtitle id='02:35:11'>the question is is if they're objects what are they an instance of what is</subtitle>
 +
<subtitle id='02:35:16'>common to all of these things somebody tell me they're all a class so</subtitle>
 +
<subtitle id='02:35:23'>what what's common to all of these what do they do they all make instances right</subtitle>
 +
<subtitle id='02:35:30'>I mean they're the thing that holds all of the information that's necessary to</subtitle>
 +
<subtitle id='02:35:34'>make multiple instances and so you can imagine that there might be a thing</subtitle>
 +
<subtitle id='02:35:39'>called class class whose own instances</subtitle>
 +
<subtitle id='02:35:48'>are these guys</subtitle>
 +
<subtitle id='02:35:55'>okay that sound reasonable why not okay</subtitle>
 +
<subtitle id='02:36:03'>down remember I can subclass what do you</subtitle>
 +
<subtitle id='02:36:08'>think it might mean to sub class class class let me do that let me use another</subtitle>
 +
<subtitle id='02:36:16'>color here</subtitle>
 +
<subtitle id='02:36:23'>so I'm going to sub class class class here look just in general what is the</subtitle>
 +
<subtitle id='02:36:31'>sub class of class class going to be able to do it's going to no it's not</subtitle>
 +
<subtitle id='02:36:36'>gonna make some classes it's gonna make be able to make classes like these guys</subtitle>
 +
<subtitle id='02:36:40'>plus something else then I'm gonna add right there because anything that's of</subtitle>
 +
<subtitle id='02:36:48'>class class is going to make classes so any subclass of it is going to make</subtitle>
 +
<subtitle id='02:36:52'>classes now here's an example of something we did at parc many years ago</subtitle>
 +
<subtitle id='02:36:57'>we wanted to do a system in which every</subtitle>
 +
<subtitle id='02:37:02'>instance was data-driven okay in other</subtitle>
 +
<subtitle id='02:37:06'>words we wanted to do a data flow system</subtitle>
 +
<subtitle id='02:37:13'>inside of small talk in which the every</subtitle>
 +
<subtitle id='02:37:17'>thing that happened to some variable in</subtitle>
 +
<subtitle id='02:37:22'>an instance could be propagated to the next thing that meant that every instance had to have besides the places</subtitle>
 +
<subtitle id='02:37:29'>in it that an ordinary instance has here's what an ordinary instance looks</subtitle>
 +
<subtitle id='02:37:35'>like it's a thing that has slots in it for holding values and plus what we</subtitle>
 +
<subtitle id='02:37:41'>wanted to do was to tack onto that some</subtitle>
 +
<subtitle id='02:37:47'>pointer information that would link all of these guys together so we'd actually</subtitle>
 +
<subtitle id='02:37:51'>have a data-driven network here now how do you suppose we</subtitle>
 +
<subtitle id='02:37:56'>did that sub class class class</subtitle>
 +
<subtitle id='02:38:02'>right the various places I could do that but what if I did it up here and put</subtitle>
 +
<subtitle id='02:38:07'>that information in here and now every</subtitle>
 +
<subtitle id='02:38:14'>every class that this guy makes whatever</subtitle>
 +
<subtitle id='02:38:21'>it is is going to have the property that the instances of it regardless of what</subtitle>
 +
<subtitle id='02:38:27'>these guys are as I go along making up new classes for this kind of thing and that kind of thing every one of them is</subtitle>
 +
<subtitle id='02:38:32'>going to have the property that the instances are going to be instrumented this way see how high that change was</subtitle>
 +
<subtitle id='02:38:37'>made what I did is I actually change the meaning of what class this was in the</subtitle>
 +
<subtitle id='02:38:43'>system with one operation I just subclass a very very high-level guy and</subtitle>
 +
<subtitle id='02:38:49'>all of a sudden I got essentially a new small talk with a completely different</subtitle>
 +
<subtitle id='02:38:54'>strategy for how these things strategy independent of what the new classes are</subtitle>
 +
<subtitle id='02:38:58'>going to be okay that's the power of</subtitle>
 +
<subtitle id='02:39:02'>this stuff it's not the direct stuff</subtitle>
 +
<subtitle id='02:39:06'>that you can do that's so appealing now it's the meta stuff that you can do</subtitle>
 +
<subtitle id='02:39:10'>that's so incredibly powerful because you can literally when you have a new</subtitle>
 +
<subtitle id='02:39:16'>idea that's important you can literally distribute that idea over the entire</subtitle>
 +
<subtitle id='02:39:20'>universe with just a few changes in a</subtitle>
 +
<subtitle id='02:39:24'>system like this well let's I think we're about done let</subtitle>
 +
<subtitle id='02:39:28'>me let me give you a one of our favorite</subtitle>
 +
<subtitle id='02:39:33'>stories and as a winch and Winston</subtitle>
 +
<subtitle id='02:39:38'>Churchill story widget Winston Churchill jokes always have them at a party after</subtitle>
 +
<subtitle id='02:39:44'>a bunch of whiskeys and I'm sure everybody knows the one of</subtitle>
 +
<subtitle id='02:39:49'>the he was incredibly drunk and a woman</subtitle>
 +
<subtitle id='02:39:53'>came up to him at two o'clock in the morning and said mr. Churchill you're</subtitle>
 +
<subtitle id='02:39:57'>disgustingly drunk and he looked at her</subtitle>
 +
<subtitle id='02:40:01'>said and you Madame are indescribably ugly but in the morning I'll be</subtitle>
 +
<subtitle id='02:40:05'>indisputably sober</subtitle>
 +
<subtitle id='02:40:11'>so this particular this particular Churchill joke a little earlier on the</subtitle>
 +
<subtitle id='02:40:16'>party he hadn't had quite as many whiskey's and the hostess of the party</subtitle>
 +
<subtitle id='02:40:20'>came over to him quite agitated and said mr. Churchill I'm just really upset I</subtitle>
 +
<subtitle id='02:40:26'>don't know what to do I saw a famous Earl over there steal some of my silver</subtitle>
 +
<subtitle id='02:40:32'>salt shakers what should I do Churchill thought for a minute and stuck his cigar in his mouth and went over to</subtitle>
 +
<subtitle id='02:40:38'>the Earl along the way he took a salt shaker himself and put it in his pocket</subtitle>
 +
<subtitle id='02:40:42'>and we got over to the Earl took it out of his pocket and said I think we've</subtitle>
 +
<subtitle id='02:40:47'>been noticed perhaps we should put these back so that's my version for why we won</subtitle>
 +
<subtitle id='02:40:54'>World War two in other words if you want to get people to do something to go</subtitle>
 +
<subtitle id='02:41:00'>along with you you have to involve them in the same conspiracy and</subtitle>
 +
<subtitle id='02:41:04'>object-oriented programming is a kind of conspiracy that people are just finding</subtitle>
 +
<subtitle id='02:41:09'>out about it I hope I've been able to involve you in a little bit and I hope you will involve others thank you</subtitle>
 +
<subtitle id='9674'>[Applause] </subtitle>

Latest revision as of 02:03, 8 December 2017

[Music] good idea to put up a slide warning you
there might be some IBM jokes of course this isn't I guess this isn't really IBM
country out here although I did hear a rumor that you're still programmed in
Fortran quite a bit and even the dread word COBOL was heard so maybe it's
worthwhile you know object-oriented programming is actually a rather old technology it is
just a few years younger in fact than the kind of programming technology that
most people are used to that of data structures manipulated by procedures and
for various reasons it has not come into
currency into vogue until the last couple of years but it's actually about
25 years ago I wrote my first program that I would call object-oriented in
1962 and people have been writing
programs in that style even earlier than
that in my particular case I was a programmer in the Air Force at Air
Training Command in 1962 the there were
no standardized operating systems of course that's true today
but back then there was actually a reason for it
nobody had gotten around to the idea of thinking it it might be useful and Air
Training Command had a problem of moving
tapes tapes with records of various
kinds on them from one Air Training Command base to another the machines
back borrows two twenties which were
machines that have had about five thousand characters of of storage we're
about the size of this room and we're great coffee warmers my image of them of
the 220 is with a this huge set of boxes with a row of pots on top trapping the
heat is a came out now the problem that
they had was that there is no way to standardize on what the formats of the
different records were they changed and the operating system he was usually just
the kind of a loading program and so there was no way of standardizing on
that and they wondered how can we actually read these data records if
everything is constantly changing and nothing holds still somebody thought up
a great idea that idea was to have the
records shipped in the following format the each tape file had three sections to
it the front section was fairly short it had a bunch of relative pointers into
the second section which contained a bunch of Burroughs 220 code and that
code knew how to deal with a third section which had the actual data records and so what you got when you
read a record from this machine was you
read that record the first two parts of the of the record into storage use the
the front part of it which were these indirect jumps into the second part of
it the code as the protocol for dealing with the tape
they're usually about 20 or 30 what we would call messages today but 20 or 30
entries in the in that first table and the code that came along with the tape
records knew how to deal with all the data so in current day terms what the
Air Training Command was doing I think it was as far ago as the late 50s was to
ship an entire class of objects the
class was shipped with the protocol with
all of the code and with all of the data in a form in which you did not have to
penetrate any of it in order to make use of it that was used for a number of
years as a technique until COBOL came in
and the Air Force forced all of the all of those good ideas to go away in order
to standardize and COBOL which is a much weaker conception going back to the
notion of data structures that are fragile now I understand that we have a
kind of a mixed audience today in that some of the people in the room are
rather knowledgeable about object-oriented programming some of the
people in the audience are here out of curiosity so I made a kind of a mixed
talk what I would like to do is to give
you sort of a perspective on where object-oriented programming has been
what it's what it's been done without without getting to historical about it
but try and give you an understanding of why it has contributed so much in a
number of areas other than just writing programs that don't break one of those
is user interface which is a very important area and there are some direct
relations chips to the way we think about objects and the way we think about
user interface and then take you into
the future a little bit and show you some of the things in which object-oriented programming is being
used for in research directions and then try and open up the form into issues
because my belief is that the basic ideas of object-oriented
are quite simple maybe too simple to be
popular until we absolutely require
simplicity in this stage of 2 million line programs but that the most
interesting thing about object-oriented programming are the are the various
issues and the styles for using it and those haven't settled yet so my
reference to the IBM joke I think a good good way of starting out the talk is
that last year it was even reported in
Business Week as a significant event IBM had its first object-oriented colloquium
it was such an amazing thing they believe that only 25 people would attend
and in fact 500 attended and they had to turn away 500 people from within IBM I
got invited to give the keynote talk part of what I'm going to show you today is from that keynote talk and standing
there in Yorktown Heights giving the
giving the talk I was reminded of William James's characterization of the
three stages that an idea goes through the first stage is the new idea is
characterized as the work of mad been
absolutely denounced out of hand a few years later goes through a different
stage when it's remarked on as being commonplace and obvious all the time
then the third and final stage is when the original denouncer is claimed to
have invented it and we are now in that
third stage for object-oriented programming because now that iBM has decided to adopt I've yet
I'm Jacobian program we can be quite sure that it's actually obsolete
and on its way out
so now before before I get into the
historical part what I thought I'd do is
for those people who are not acquainted with it at all I thought I would just
say a couple of couple of words about
what it what I mean when I say object-oriented programming and I have a
I have a very simple diagram here for me
the whole notion of objects was
triggered off by seeing a number of different systems some of them in
computer science but the first ones that I looked at were actually biological I
have a degree in molecular biology and
one of the things that struck me when I was studying molecular biology many years ago was that compared to the kinds
of structures that we tend to build here on earth the average biological
structure is more than a thousand times as complex both as regard to the number
of different parts it has and to the
complexity that has to be controlled for
instance a grand piano is a rather complex machine has about 20,000 parts
which surprises most musicians you don't even think that they're actually playing
on a machine they think of it as an instrument and the instrument by
definition can't be a machine but in fact it is a machine has about 20,000
parts our bodies have approximately a
trillion cells in them and each cell is
rather complex each cell has many millions of components in its own right
so one of the ways nature discovered to
control complexity and the kinds of interactions that are likely to happen
is to try and incapsulate them in
various ways this is a familiar principle to us it's something that we use in regular program
as well trying to encapsulate and the
question you're always asking when you encapsulate we're going to ask this
quite a bit later is just what is encapsulated what kinds of things are we
trying to control are usually in regular programming what we encapsulate are
sections of programs that occasionally
will try and encapsulate with regard to a protocol for dealing with some system
we don't want to inquire about the internals of what biological systems
encapsulate is the actual environment in
which most important processing takes place there are very few object-oriented
programming languages that go that far the average object-oriented programming
language encapsulate snot the environment but in fact something like
the state of a data structure along with
the procedures that know how to intimately manipulate it and try and tie
those two areas together in a way that
they cannot be penetrated from the outside when people speak of an
object-oriented programming language like Objective C or C++ they're talking
about even less than that because they're the encapsulation is almost a
convention it's done by means of macros
the amount of protection at runtime that
is delivered is rather low so there all
of these gradations now biological systems encapsulate with a vengeance
because nature discovered that if you
give each cell its own little captured ocean and let it devote about 90% of its
actual energies to simply protecting
itself from the outside world as though the outside world were hostile then you
get a situation where you can build very large structures rather safely and
encapsulated is not just the saline solution not just the organic Moloch
skills but also encapsulated and not
just the programs that drive the cell but in fact encapsulated in biological
organisms as many of you are aware is the entire plan for the entire structure
okay now we don't generally do that when
we write an object-oriented program but in fact people are starting to do that
now in artificial intelligence and people who are interested can can bring
this up later so my particular
my particular motivation
when I started thinking about objects
was simply that of biological cells and
one of the things that is difficult to escape when you look at biological cells
is first the extent to which the outside
world is kept away from the cell membrane and then the other thing is is
that the cells aren't completely in isolation they communicate by means of
sending messages to each other and again the way we way we translate that into
computer terms is done in a much more
restrictive way than biology does it biology generally communicates without
wearing who's going to receive I'm going to talk a little bit later about a
object-oriented strategy in which messages aren't sent at all they're only
received you might think about what an object-oriented system might be like if
you never sent a message but objects could receive what would they receive
all I could do is receive the translation of this model into machine
terms for me 25 years ago or so was that
these biological cells acted a lot as though they're on a network you can
think of it as a crossbar switch or a
Ethernet type network in which every object can send to every other object
and each one of these things is a lot like a little computer in fact is very
difficult in a good object-oriented system to find out where the hardware
stops and the software begins and the
this notion of a little computer in the
in the large here is something that is worthwhile considering when we think
about making very small things now there's a principle in design that
people came up with many years ago it's
called the basic principle of recursive design and the idea is make the parts
have the same power as the whole
we know in the factorial example that a
recursive program like factorial its
charm is it's able to reinvest the
conditional branches and so in some sense the program remains as long as
that is true the program remains as strong as it was when you entered it
because you can always reinter it instead of getting diluted away now
another thing that that crossed my mind when I was pondering these ideas back in
the 60s was why if that is such a
powerful idea why is it that we take a very powerful idea like a computer and
dilute it immediately in most programming languages divided by
dividing it up into data structures and procedures data structures don't have
the same power as a computer they're static can take on marks but they're
once once you get a data structure it just sits there procedures don't have
the same power as computers because they can't remember state they have to have
something additional so what we did in the guise of following standard math
mathematical notation in the 50s when Fortran was developed was to mimic
standard mathematical notation without thinking about this basic principle of
recursive design because people didn't write recursive programs back in the 50s
and so the baby is thrown out with the bathwater almost immediately in a
standard procedure and data structure language and it occurred to me and other
people who are thinking about these ideas back then what if you didn't do
that what if the only subdivision you ever made in a programming language was
a subdivision of a computer into a computer you're never allowed to
subdivide the computer into something that was less than the computer and what
does that mean that means that each subdivision has to be something like a
black box that has inside of it some
mixture of State and process from the
outside you can only invoke behavioral attributes
rather than invoking method attributes
and what I mean by that is this is something that was even in Fortran
because the earlier designers of Fortran realized that there is a very funny
correspondence between procedural things and data structure things so for
instance when you say Si and parentheses
30 close parentheses in Fortran you
can't tell by looking at that whether you're invoking a function or whether
you're accessing an array and that was not accidental back then because of
course they thought of arrays as being a kind of a function and they wanted you
to be able to write arrays huge tables
still done today in order to do
functional evaluation very quickly what they didn't realize is that you wanted
to be able to trade-off between the two but that notion of just saying sine 30
degrees without indicating how its to compete be computed is the essence of
the kind of abstraction that that object-oriented programming is all about
it's carried very far here by
this strong membrane of the object so that what we're dealing with here are
behaviors and there are two important
implications that had to be worked out early on one of them is that messages in
most cases can't be commands or you're
violating the notion of the object as being in control now most
object-oriented systems today when you do what is called sending a message you
are issuing a command Objective C C++
even small talk eighty all of those systems a message is actually something
very very close to if not identical to a certain kind of procedure call okay but
in fact in the original scheme and we can talk about the implications of why
this is a good idea later in the original object oriented
systems that were so successful messages aren't commands at all what they are are
desires I'd like to have this happen just to
give you an example of why imagine we have an object masquerading as a
critical system file and the question is
it should just anybody be able to come up and issue the command to it turn byte
5 to 0 now it's done all the time but in
fact in an object-oriented system you would like the object to be able to
protect itself so that even a person who
has a pointer to it even a person who has the knowledge of which command is
the right command that both of those do
not imply that you have permission to actually change that file so in the when
I talk about an object-oriented system I mean an object in which the worst you
can do to an object is to simply indicate to it that you would like it to
do something for you and the best that can happen is it will do that the worst
that can happen to it internally as it will simply refuse it may put you may take your name
and give it to the principal later if
you've done something wrong but so this notion of absolute control that messages
can't be commands and the other one is
because the object is no longer a data structure in any sense that we regard it
that assignment is something that can't
be done from the outside either so the assignment statement has to go away in
the form that we know it as an irrevocable change to a variable or a
slot in a data structure an assignment has to be changed by something that we
can think of as being advice or influence so again this notion of
getting an object to to change its state is something that we normally don't do
in object-oriented programming because normally in object-oriented programming
we are not simply trying to imitate data structures now to be a data structure is
that thing that if you send it to
somebody else you're giving them permission to change it that's what I
mean by a data structure so it's clear that some of the things that we call
data structures in normal parlance in a
system with an operating system that offers some protection are not strictly
classical data structures by that means certain files usually have protections
on them so that in a good operating system when we send a file from us to
somebody else we are not can conveying to that person
the same level of protection necessarily that we have been granted so in a good
operating system this is this may be an operating system that you've never seen
but there there have been operating systems in the past there exist
operating systems now so that if you have a certain set of permissions for a
file a and you wish to give it this file
to your friend suppose you have the the magic permission to change the any
byte in the system file because you're a honcho then you might wonder should I be
able to pass on those permissions to the
next person that I give this file to the answer to good operating system is no
each person should get their own permission separately and when they
receive this file a it's their permissions that are granted by the
operating system that obtain not the permissions passed on to them by
somebody who had the file before so you can think of taking this desperately
important file passing it along and when
it goes to somebody who is less to be trusted with it they have fewer
permissions on that there are fewer things that they can do with it and then
they passed it on to somebody again that may go back to a trusted person that
person should be able to reintroduce
that is called capability protection and
capability protection is again another one of these old ideas from the 60s
intertwined in a very strong way with
object-oriented design that is now coming back capability is simply a
technique for protecting objects in a
stronger way than normal digital computers allow them to be done and
again at the end of the at the towards the end of the talk we'll talk a little
bit about this so to me there are lots
of different ways of talking about objects but probably 90% of the reason
to me for dealing with objects at all has to do with their abilities to
protect in various ways protect by
encapsulating various kinds of things almost always state less often control
is encapsulated and so forth then about
10 percent of the use of object-oriented programming to
has to do with its ability in whispering
to you how you might design a system better and just one more note about that
before I get started on the on the talk proper and that is that the way objects
are used today is a little bit confusing because they're intertwined with a
another set of ideas that came out of the 70s that are very similar
particularly in implementation these days and that's what's called data
abstraction how many people are familiar with data abstraction as a idea okay so
data abstraction looks a lot like object-oriented programming but its
intent is different the intent of data abstraction is to take a system that
you're familiar with like Pascal or Fortran that is starting to run into
difficulties of various kinds difficult is usually a representational ones I
think everybody's had the experience programming in a language with data
structures you get this big system done you decide you need to change your
representation and the next thing you know you're hunting down all of the
procedures that think they knew about the old representation and the rule of
the universe is that there's always one or two that you don't find so you slide
in the new representation and a couple of months later one of those procedures
is invoked and all of a sudden you have a crash and people wonder why the answer
is the critical knowledge has actually
been spread out in such a way that it can't be recovered it's like what you
have to do after you do a multiplication in order to recover the the operands you
have to do much more work like the difference between differentiation and
integration the same thing is true is once you've lost information in a
century in a system once the entropy has
gone up then it's very hard to get it back so one of the things that you try
and do with objects is to try and maintain the
as much informational content as you possibly can in a smaller place as possible now data
abstraction techniques use a similar way of wrapping an envelope around a data
structure and invoke operations by means of procedures in order to try and get it
to be a little bit more representation independent the difference though ADA
for instance is a language that is a data abstraction language is not an
object-oriented language and even the the people who actually understand ADA
don't claim that but you can do certain kinds of things that are now today
called object-oriented in Ada so this
envelope of procedures is wrapped around the data structure in an effort to
protect it but then what happens is that this new structure that's been created
is then treated as a data structure by all the rest of the program the result
is in particularly in ada is that the
programs are not small the programs aren't any smaller than they were before
and one of the hallmarks of object-oriented programming if you have any sense of whether you're doing it
right or not is that the programs are remarkably smaller because there's a way
of using the design that is not simply
imitating a bad old idea which is data structures and trying to shore it up by
putting it in an orthotic brace but in fact to go beyond the notion of data
structures so for instance in in a NATO way of of doing object-oriented
programming one typically comes out with
something that looks very much like a data structure it has fields that are to
be written to it has fields that data is to be taken out of the structure is
static there's no actual process going on and it's essentially a slightly more
abstract way of doing data typically in an object a good object will not
actually permit you to write assignment statements to it at
all because an object generally will not
look at all like a data structure just to give you an example we can contrast a
personnel record as it might be done in
Ada in which we still wind up with fields as we had them before some of the
fields might be a little bit more connected but it's still a large thing
it's still passed around as a passive object we could contrast that with an
object-oriented approach with which would be to try and turn the personnel record into something much more like the
like a real person in other words this personnel record instead of sitting
there on a file waiting to be manipulated would actually be trying to participate actively in some sort of
simulation instead of changing the person's age from the outside the way
you might do in a data record the age of the person would change dynamically as
the birthday was passed because there was something in this object that was
actively looking at the clock actively running in some sense the notion of
being able to edit the object from the outside would be much less in the sense
of editing the actual fields so objects even in a in a programming language in
which everything is an object like small talk objects tend to be larger things
than data structures they tend to be
components active machines that fit
together with other active machines to make a new kind of structure just to
give you an example of a modern attempt
at large scale object-oriented programming which hasn't been done very
much for a long time the largest object-oriented system was small talk
zone system which was even though it had
its own user interface and its own operating system and its own sets of
editors and facilities and file system
and every other kind of thing the small talk ad system that is distributed by park play systems
for instance is only about 40,000 lines of code which to me is is 10
approximately 4 to 10 times as large as it actually needs to be it's actually
kind of junky in various ways but when
you consider that the UNIX kernel it's alone is 400,000 lines of C and that is
thought to be a rather small kernel in the operating system domain you can see
that most object-oriented programming historically the programs have been tiny
the all of the stuff that we did at Parc that led to the Macintosh could be
summed up this includes the equivalent of about 15 different Macintosh
applications including mac draw and mac paint and all of those things were
summed up by approximately 175 pages of
code or approximately 8,000 lines of
code that included the operating system the user interface and everything these
programs are tiny when they're done right because of that people have been
very suspicious of them in the world for instance that you come from you know
does this idea really scale is it just for toy problems and so forth the most
recent example of object-oriented programming in the large that I know has
one done by Arthur Anderson consulting at the Brooklyn Union gas company over
the last year now Arthur Anderson I don't know how large the jobs typically
are at McDonnell Douglas but Arthur Andersen consulting typically and I
think they do some work for McDonnell Douglas but typically when they get to
work on a job their clients have already failed a couple of times and implementing it they're usually called
in at the last moment they charge twenty
to fifty million dollars a pop for one
of these jobs and their jobs typically run to about one and a half million to
two million lines of COBOL this this is
done over a period of about a year and a half to two years by a highly trained group of
people I think of as technological Marines they have a very rigorous
high-spirited training facility called st. Charles they have a approximately
27,000 people who do this kind of work
and it's a fascinating fascinating set up I'm on their technical advisory board
and I got on the board partly just because I was interested in the culture
of this particular company I was really surprised that given how successful
they've been that they have been shifting their entire set of operations
over to objects over the last five years or so it's an enormous change for them
because they have it's not the change in
going from a non object-oriented language to an object-oriented language the change of going from one kind of
culture to another kind of culture it's a change that as Koon mentioned about
paradigms the reason the paradigm shifts take 25 years or more in science is in
order to have a paradigm shift in science you generally have to let the old physicists die off once once people
have learned a technique and have gotten comfortable with it is extremely
difficult for them to go to something else the Macintosh user interface in its
early stages had that difficult people had gotten so good with function keys
that they actually felt diminished by
using the mouse even after was shown to them that the mouse is four times more
efficient in speed over what they've been doing with the function keys it
didn't seem that way to them because they've gotten so adroit with it and the
same thing is true with any technique that people use so Arthur Andersen has
done a number of different pilot projects but last year they started the
first large implementation this is a project that was a reimplementation of a
system that had been done some years ago and it was originally designed to be
done in the standard Arthur Anderson case tools and the estimate was 1.7
million lines of COBOL and approximately 2 to
two and a half years of implementation time to do this enormous system which is
both both an accounting system and a management information system and as an
experiment they decided to left a New York group which had been the pioneers
in object-oriented programming do a
implementation using object-oriented techniques now of course they didn't
have an object-oriented language to work with for their end result this was to be
done on IBM mainframes 30 90s there are
no object-oriented languages extant on
the 30 90 so they did a trial implementation to test out the design in
small talk taking a few months to do it and then wrote a set of library routines
and some pre-processing macros for PL 1 and then we implemented this project
with about 10 programmers in PL 1 so the
results of that are now in the minor
interesting thing was that they got done about 6 months early the major
interesting thing was that the amount of code that actually had to be written to
do this Amandla to 150,000 lines of this
library is PL 1 as opposed to the 1.7
million lines of COBOL that their estimates had done before so this is a
factor of 11 less code and from their standpoint the six months was down in
the noise because the the months that they're interested in are the 5 or 6
years of maintaining the code from then on and being able to reuse those modules
as they are going to be able to on other 3090 implementation so in some sense the
the fact that you can program faster that you're you can save time and so
forth in object-oriented programming in in the larger world is not nearly as
interesting it as it is in research and research basically the ability to do
quick prototyping dominates almost everything else
in the large world the world that you come from the world that Arthur Andersen
is in quick prototyping is something they'd like to do they're starting to do it but it's not nearly as important as
maintainability reusability is the
second thing if they can reuse a module as a component in some other system then
they have saved themselves an enormous amount not of time although they have
certainly done that but to them it's not time but it's designer skills the thing
that all large companies are weak on is having enough designers to go around
they're usually plenty of people to write code but the designers are few and
far between and this notion that a successful design can actually be moved
from one place to another in components is something that literally drives the
Arthur Andersen people crazy with joy to to think about so they have now come up
with an object-oriented repository and are starting to craft rather large
useful objects that can be used as standard components and building blocks
in various systems and we'll talk a little bit later about how one goes
about to me this is what object-oriented programming is about it's not saving
data structures from itself it's not making a slightly fancier data structure
it's not even making a data structure that can implement certain kinds of constraints within itself and so forth
it's thinking of those objects as independent machines going back to this
whole biological notion that it's one thing to build cells and it's another
thing to build tissues and for people
who are just starting out in object-oriented programming they're usually thrilled that they can build cells but the real goal is to be had
when you move from cells to thinking about what are the tissues what are the
conglomerations of these atomic style objects into components that if you were
to have three or four hundred of them in a repository usable by any programmer
what would you be able to build could you be able to Tinkertoy things
together could end-user programmers be
able to do a considerable amount of the programming and retailer and so forth so
the real change if there is one I think
I think it's coming faster than we think that object-oriented programming is
going to bring along is actually both a change in the way professional
programmers do their work but even more so a change in the way these
applications are designed another example for instance at Apple now we
design all of the applications that we do as though they are going to be
actually tailored not completed but
tailored by an end-user a person who has
programmed almost not at all person who's used HyperCard a few times
so this is a really big change and it's
something that has been talked about for 20 years or more but it's something that
just now is possible to actually do what does it mean well it means what you'd
like when you get an application from somebody is to be able to use it right
out of the box read them the manual understand what it is don't have to sit
down and think about it as a kit or anything but just use it the way you're used to using it now it's a temporary
solution to some set of problems you have right now also you wouldn't be using it but a month later your old
attitude about this ad this application has changed completely month later now
you're saying boy I wish this thing could do this and I wish this thing could do this everybody does that person
who's never program before is only used the computer for a couple of weeks after
a couple of weeks they'll say boy I wish this thing could do this and I wish it could do that and that's the point where
you'd like to hit the hood latch button on the application and open it up and
see something in there that was comprehensible right now if you open an
application on the Macintosh you open it up it's sort of like looking into the
hood of a Mercedes Benz or something there's this mass of tubing and if the
thing had a carburetor you find it because it's a mass of spaghetti
mostly machine code on desktop micros but doesn't matter whether it's machine
code or Fortran it's a mess and on the
other hand what the user wants to see when they open it up is something that looks like a Model T they want to see a
schematic even if there's a Ferrari underneath the Model T they want to see
a Model T they want to see a schematic engine of what makes that application
tick because they've already got an intuitive notion about how that works and then they would like to be able to
make changes at the level of that schematic engine there are a bunch of
applications you can buy for the Macintosh now in which that's possible
an example is focal point and most many
other applications written in hyper card because hypercard is a an object-oriented language set up so that
professional applications programmers can give you not just architectures not
just a kit but working architectures working kids and then after you've used
them for several months you can make the change that's going to change the whole
way we go about designing things professional programmers won't be
designing programs for each other or F at its worst professional programmers
tend to design programs that will keep them in job security there's a class of
programmer who delights in the obscure they love the fact that they are the
only ones that can understand how this program works and there's a maxim that
says if you're the only one who understands how it works you don't understand how it works and so progress
is isn't to be made there so so I think
I'm going to go into the the give you an
idea about where some of these ideas came from the one thing I think you may
be a little bit surprised to add is some of the earliest object-oriented ideas
were some of the most sophisticated and it will be revisiting them in the next
five and ten years to come one of the reasons for this is that because you
couldn't make money in computing in the 60s many of the people who
had ideas about how computing should be done in the 60s had extremely pure
conceptions those conceptions are
powerful yet today and it's worthwhile showing you a few of them
so just just as a reference point
I like I always like to start off with this slide because this is my vote for
the world's first personal computer this
picture was taken at Lincoln labs in 1962 summer of 1962 and this is a
machine called the link and it's
especially appropriate to mention here since the person who invented this machine West Clarke had a research
project at Washington University for many years
sponsored by ARPA those things that look like Dec tapes over on the side he
actually invented they were called link type tapes originally and this is kind
of a metaphor for our talk which is the
best that Dec could do with these ideas that came out of Lincoln labs as well
when Dec saw this machine in the early 60s it said boy what a great way of
making a small mainframe and it immediately adapted the the architecture
of the link to make many computers but Dec said well people aren't used to
looking at displays let's make that an option so he took the display away and
people didn't understand what was
actually on the link tapes some obscure stuff so they said well let's put files
on the link tape so I'll call him Dec tapes and out of this machine Dec was
able to come up with the astounding idea of the mini computer whereas in fact about 2,000 of these were built in the
60s and an astounding as far as I've been able to determine is an astounding
900 of them seemed to be still working today now they were designed for
biomedical labs for technicians who
needed to do their own programming and needed to do real-time experiments and
it was an almost perfect machine by the way what was on those original link
tapes what was on there were the pages of the virtual memory this first personal computer
had it's very hard to go out today and
buy a personal computer that has a real
virtual memory this machine had it back in 1962 so as an excellent idea but like
many things thought of it it actually
was so far ahead of its time that it took another decade or so for people to
catch up to it
one of the very first object-oriented software systems and one that's I think
a particularly in this talk is Ivan Sutherland sketchpad which is also done
at Lincoln labs on the tx2 computer which was the last computer in America
large enough to have its own roof and in fact was it was about four times the
size of this room and every Thursday they would take it down and change about
10% of it because they were always
putting new things it had some of the earliest core memory ever devised and
it's quite a remarkable machine for its day it was used as a single user machine
by Ivan Sutherland to invent sketchpad
and you see him here he's working with a
bridge truss sketchpad is very difficult to appreciate and just by looking at
slides so I thought I would show you a videotape of it in operation so if we
could run the first videotape take a
look and see what this again is the summer of 62 is tape number one stop
could you we I thought that was rewound could you rewind that please
and then show it
now back then they didn't really have computer displays as we know them today
so that tx2 here is actually simulating the lines by drawing dots rubber band
technique that you've seen before now here's something that I even invented which is he's pointing at the edges and
telling sketchpad he wants them all to be mutually perpendicular and sketchpad
just solved that problem we see the sketch pad is the first system to have a
window the virtual paper he's drawing on
is about a third of a mile on a side
here the constraint was make the lines parallel now the constraint is
collinearity so sketch pad wasn't just
the first graphic system was also the first non procedural programming system
so everything is controlled by non
procedurally giving goals that the system has to figure out here he's
making the guidelines invisible to get some dashed lines
so he's made himself a flange now he wants to make a rivet and this is why it
was called a sketchpad that you didn't
want to have to be precise he wanted to be able to just sort of sketch things
he's gonna use that as the center for an arc and now he's going to again point to
those and say make them mutually perpendicular that pulls the center
which pulls the arc which makes it symmetric which makes the rivet because
of the way that program is implemented you can actually see it solve the
problem there's actually quite
sophisticated this is a nonlinear problem that's actually solving
so no matter how he distorts it it comes up with the same general shape and he
could constrain the ratios of the lengths if he wanted to now what he's
been working on there was actually what we today would call a class he called it a master and this is an instance of that
Rivet can make it larger or smaller
so he wants to latch it into the flange here you can see that this program
rapidly led to better display designs
these are other instances of the rivet and now he goes back to the master and
says well let's make those guidelines invisible so it looks more like a rivet and we see that the instances
dynamically feel that change so these
are not copies but actually dynamic instances
okay and now he shows that any constructed thing can be a master so he
had made the plan for the rivet into a master now he's pulling instances from it and rotating them and changing them
and so forth
okay if you stop that tape please so
sketchpad even today is an amazing program you can't buy a graphics system
that is nearly as as good today in the
sense of it being a comprehensive system for allowing you to set up problems
allowing you to solve problems its implementation not just its appearance
was also object oriented and the style
was something that Ivan settlin came up pretty much on his own because of the
difficulty in dealing with many different kinds of objects and having
them solve constraints and being able to make pictures for them of themselves and
so forth so he got interested in this idea that each object could actually
have its own drawing procedure embedded in it and all you had to do is be able
to send the message draw to any of the objects and it would invoke the correct
procedure although would be a different procedure each time and the same notions
were later used for constraints now I
once I asked to Ivan I said Ivan how how
is it possible for you to in one year just by yourself come up with the
world's first graphics system the first non procedural programming system and
the first object-oriented software system and he said to me well I didn't
know it was hard
fortunately didn't and actually it has it has barely been improved on since
there have been some improvements since the system called thing lab done at park
about a decade ago or so was an improvement on it this whole area of
constraint driven object-oriented
programming is something that is a hot topic in research right now and I think
for the first time in twenty years is actually going to yield some fruit over
the next five to ten years the reason is is that people who do mechanical design
particularly such as you do here at McDonnell Douglas require now for the
first time serious simulation of the
mechanical design particularly how it articulates with other parts of the
design really want to have a simulation job-shop built into the design system so
you can do a lot more than just finite element analysis but be able to do
analysis of linkages and other kinds of situations that are too difficult to do
simple in analytic solutions or do finite element analysis and the answer
to this is a kind of constraint driven object-oriented design the sketchpad
actually invented the first kind of so let me give you another example I'm
going to go to the number four tape this
time though
okay okay I'll pause well had some
interesting questions actually one of
the things I should have mentioned at the beginning is I'm perfectly happy to entertain questions that at any point I
believe that the the we have an hour and
a half that the at least an hour of the
hour and a half I think we should spend talking about issues that concern all of
us about object-oriented programming I have some of my own people who are
starting out on it may have some crap you the trepidation they may wonder
where it's going what the actual leverage is I had a a question asked
again about the difference between abstract data structures and what I
think of as a real object-oriented style another question was asked about is
there any way of preserving already written COBOL and Fortran code in an
object-oriented fashion so it doesn't
all have to be thrown away and maybe
that last question is one that's worth while answering now a lot of companies
are trying to figure out what to do
about object-oriented programming particularly given that there don't
exist any good object-oriented programming languages for programming in
the large small talk is not a good
language for programming in the large as it's currently distributed it's a great
language for learning about object-oriented programming because it's
written entirely in itself and so you can learn how an operating system how a
user interface how applications how little things and
larger things can be represented in an object-oriented form how inheritance
subclassing and so forth all those things small talk is ideal the of the
small talks around to look at the one
that has the best manual is the one called small talk V and it runs on both
the IBM PC and the Macintosh it's not
the mote it's it's a rather complete system in in a number of ways the other
system is called Park Place small talk small talk
8e and it is sort of the granddaddy of the small talks that that Xerox has
released it has a even more complete set
of system tools and some very ambitious
applications written in it both of those are worthwhile looking at
but for programming in the large objects
aren't enough I don't believe and the reason is that at some point it's not
simply a matter of piecing together something that is supposed to run it's a
matter of being able to verify different
sections different parts different modules independently to be able to
unplug and replug and even I think in
many cases it's desirable to allow different implementation languages to
actually be used now if we look at the
the standard
so we have a glob and the main principle in object-oriented programming is to
separate the outside from the inside so
on the outside we have a variety of
messages that we're willing to respond to and on the inside we have some
methods oh sorry
we have some methods the may or may not
correspond to these things on the outside cuz whatever the idea is we're
not supposed to understand what the inside looks at from looking at me on
the outside and outside thing might even correspond to a little data structure
inside a thing equally innocent might
correspond to an enormous amount of code there might be code in here not directly
connected to this and in fact some of the messages that the object may be able
to receive aren't directly characterized in terms of some outside protocol lots
of different variations here but the most important one here is that we're
trying to separate a protocol
from some methods
at this level and then if we think about going a little bit more fine-grain where
we started having zillions of objects interacting
in a sea of messages
in fact some of the
some of the objects might not even be on the same machine they might actually be
over here a good object-oriented system
you shouldn't be able to tell what machine you're running on that's what
messages are all about very quickly when
we're starting to build a large system down here we've got something
interesting we have absolute protection but we still have confusion right
because it's you can have thousands of
thousands of diamonds that are impervious to all normal wear and tear
and still not be able to build the simplest structure out of them they may
need to be too shiny may not be able to pile them up they may not fit together
but by god they're perfect so what I'm
trying to say is that the the protection issue is a critical one but it still
doesn't guarantee that you actually have an architecture now in small talk in the
most object-oriented systems how you come up with these guys is govern very
much by convention there's a particular
way like it's a convention in small talk systems that one of these guys will always be called print so that for every
object in the system you're guaranteed that one of the messages you can send to
it is print and theoretically what that
means is this little patch of green in
here that corresponds to print is
supposed to print for you now there's nothing in small talk or any other
object oriented system right now that guarantees that printing is going to be
done now there was a strictly conventional it's something that
everybody agrees to it's like overloading operators in Ada when you
overload plus in order to give plus more
meanings for different structures you're usually trying to adhere to something
metaphorically similar to what plus originally stood for so for instance if
you have a plus a plus it adds two numbers together you might overload it
to apply two arrays so that the operation is some sort of point point
point addition maybe vector addition sometimes you might overload strings -
what could + mean and strings well one of the one of the ways of thinking about
strings algebraically is that plus means concatenation because it's a way of
adding two unary numbers together and so forth and at some point you started
stretching it as you stretch the metaphor but generally you don't want
Plus to go off and do some sort of multiply or something else but the only
thing that controls that is some agreed on set of conventions and because of
that what this protocol is how complicated it gets and so forth is the
most important part in any kind of object-oriented design but it's also the
most fragile the fact that there's
nothing to protect print is absolutely
critical let me let me give you an example of what we could do to protect
print
one of the things we could do is to have
instead of having print just be code we
could actually have a print class
and its offspring its instances are
actually structures that look like this
okay in other words each offspring of print is a message method pair in which
unrestricted code writing over here is not allowed does everybody understand
why this is an interesting idea because
so but if you could only if you can write anything here then J random
programmer often will as you go as you
go along and the fact that the system seems to be conventionalized at this
protocol message level which is the very
charm of object-oriented programming why object-oriented programs work so well why they fit together gets destroyed as
the amount of generic information in the
actual methods gets diluted but if
another way of doing an object-oriented system is to actually make classes for
each of the major code types that you're going to write and what you get here is
something that would insert itself in here but in fact the only codes you're
allowed to write are certain little restricted boxes in here and this thing
guarantees that it's going to print for you it's not going to go off in zero
byte five of some system file this thing
because it came from a print class and because the print class does printing
type things every piece of code that goes into a protocol actually is going
to do something like printing and what you're allowed now is a certain amount
of parameterization a certain amount of freedom but the meaning of print now has
been nailed down because there's some actual code from the print class
sticking behind here that you can't see that's going to make every effort to
deliver a result that is what you want this is like types in type languages
except it's stronger because it can controls the goal of the result the goal
of the result not the shape of the result right in a typed
language when you have a typed variable or type procedure what you can state is
that might have some integer parameters and I'm going to deliver a
floating-point result what you can't say
in the type statement is what the intent of that procedure was the only intent
that you could indicate is that's going to in it's going to give you some sort of floating-point result you can't say
it was supposed to give you a sine or cosine or anything else that is up to
the convention of the actual programmer
itself so what I'm just pointing out here is that if you take a if you take a
system in which there is a protocol you
can get a lot out of it just by having the protocol be a convention agreed on
by everybody as you go into a larger and larger system that that inside out
outside Ness will protect against the inside getting dissolved by some hostile
act action by the outside but what will get diluted as you go to a larger and
larger system with more and more programmers is whether the protocol is
going to have any meaning practical example in small talk has approximately
Park Place small talk has approximately
5000 of these green things each one of
them is there each one of them can be reused by inheriting it from somebody
else the number of red things it has is
on the order of twenty one hundred that
means that the amount of how generic the
code is with respect to the protocol is not much right it should the number
should be more like 400 or so different red things four hundred concepts and say
five thousand realizations of those concepts now print is the happy exam exception to
that because if you have a 154 different kinds of objects than their 154
different green guys and only but only one print concept so there's the same
technique that people use overloading of operators for you want to reduce the concept space by making it more
algebraic make take a concept make as
metaphorical as you possibly can and
like equal is a good one what does equal mean some systems that
means we have I'm looking at exactly the same thing some systems it's okay for
the same if the same things look the same some systems is if under some
particular evaluation rule they evaluate to the same thing or they might evaluate
to the same thing so equal is one of these very slippery notions because it
very quickly becomes useful to think of equal as being very useful in terms of
equivalent this is equivalent to that
that's a generic notion so again you might imagine that one of the one of the
things you might like to have be generic
are comparisons equal equal is a much
stronger one of course than greater than or less than because greater than less than involve some sort of sorting but
again greater than and less than don't have to apply just two numbers in small
talk there's a super class called magnitudes and anything that can be
sorted in any way under any kind of sorting rule is underneath magnitudes
and underneath magnitudes are things
like less than and greater than
so for instance dates are an example
times time intervals anything that can be sorted in any in any form you can
those what you might what you would call operators in a de or automatically
overloaded now what happens in an
object-oriented start off with a nice set of these and then as practical
programmers chew on it the heat of debugging one of the things we
discovered is that even good programmers don't make up generic operators for
things what they do is they make up any old word think they can think of at the moment write a method for it and
continue on the result is that what the
object-oriented style was buying for you starts diluting it starts gradually
diluting away the manuals get larger and
all of a sudden you're back to something that is close to what you had before so
I'm not I'm not sure if people didn't understand this explanation I'll be glad
to go over it again because it's it's
it's one of the important examples of something that you can actually do with an object-oriented system everybody more
let's get what I was talking about that you can actually legislate one of the
things you can do in an object-oriented system is to legislate to some extent
even what the code that the programmer is going to write is going to deliver to
you you can build in to these main
concept classes the tests to see whether
the code is it all behaving the way you think it is those tests can be run
independently of the programmers who are writing the code now another thing you
can do using these protocol ideas is
horrible as it sounds there's no reason why you can't put some COBOL in here
this is not something that people do in
a typical object-oriented language like small talk because it's designed to to
write all of the methods in itself but if you think about this whole notion
here as a binding mechanism for a component not just as a way of
protecting a data structure but a binding mechanism as a component then
what you really are programming in terms with is the blue and the red what the
green is is almost completely independent as long as it conforms to
whatever this guy wants it to be able to do what I advise large companies when
they are embarking on object-oriented programming is to do a few systems using
something like small talk or preferably just to get an idea of what it's about
but then think of all the things that you've already learned about controlling
modules and systems and realize that the
small sizes of the code of the small talks from the 70s don't have all the
protections in there that you actually need what you really need is what these
days is called a configuration language a C language configuration language
and this language can be independent of all of your method languages it's it's
something that is dealt with it the operating system-level it's something in
which the protocols are chosen as much as possible ahead of time it's a
standard vocabulary of concepts that you're going to use to write in it's one
in which the protocols are controlled by active code the give you places to write
code and insert other code that allow you to bring over a COBOL routine or a
Fortran routine or whatever the heck you want and bind it in it's a binding
mechanism it's a way of setting up
environments for debugging modules
independently of each other it's a way of assuring yourself that a module will
be able to move from one place to another it's a way of discovering
whether you want to use a module so at
some point the ability for human to read this configuration language is going to
be much more important than the ability to write it one of the embarrassments
that you often find in an object-oriented language is you have all
of us we have usable code and it's too hard to find the modules you want to
reuse small talk has a lot of that flavor anybody who's ever tried
programming and especially in small talk 80 is bewildered by the fact that the
system is completely written in itself there are tons of usable things in there
and yet it is such a pain to find those things you wind up tandem out having to
read other people's code and then in order to find out whether you actually
want to use the stuff so the for instance what Arthur Andersen is doing
right now is to try and come up with
something that is completely independent just completely x-out forget about the
interior stuff just come up with something that is basically modules in
terms of blues and Red's making the the
red message protocol be as powerful as possible controlled by other things and
then using that as a dynamic binding mechanism for
configuring programs it allows them to
take large sections of database and
sequel calls that they've already done and bind it into an object-oriented
framework as an example yeah yeah
so configuration
let's start off with the things that you might want to have in it now the there's
only I only know of one actually good configuration language that's been done
as a language called C Mesa which was
done by the Parc computer science lab
about ten years ago and it served
exactly this this purpose and here are some of the things can have it there are
some things that you'd expect just from your previous experience you'd expect
that there would be some sort of message name for something you'd expect that
there would be I Oh parameters so that
you would have input expectations
output expectation
a good configuration language has a an executable predicate you can think of as
a goal that they may have a variety of
them and I connect those with when I say
input expectations I mean not just the
types of the parameters that you expect to send to it and the types of the
results but also these predicates sorry
predicates you can think of
preconditions on the input side and goals on the output side
you can think of those as being executable there are environmental
expectations
one of the difficulties in most object-oriented programming languages is
although you can protect an object what
you don't have any sense of when you want to move an object is what the
object itself expects to have as environment as a give you an example in
small talk you can write an object move
it for one place of a particular Smalltalk system to another but when you
want to take it out of your small talk system and give it to somebody else a small talk system you often are
unpleasantly surprised and it's not that
the object has been solid in any way it's that it has some other assumptions
about its environment that you weren't thinking about before in particular
small talk allows you to do the somewhat obscene thing of allowing you to go and
change existing super classes to make them more the way you like the benefit
of this is that every class and the system feels this improvement and the
problem with it is if that improvement is important then you've all of a sudden
have done away with your portability so what I'm trying to point out here is
that the modularity you get in object-oriented programming is slippery
and one of the most critical things to do is to be able to pin down the amount
of modularity that's actually there I'm gonna I'm going to go into that in a
little more detail so the there are more
things that are here people have design
configurations languages in such a form that you can actually from the runnable
parts of the stuff that you can actually derive an explanation mechanically of what the method and what
the module itself is supposed to do
okay so there are any number of things
basically it's something a little bit more close closer in spirit to Parnas
they've partners who did one of the original notions about information
hiding although it wasn't object-oriented than what you might think of as straight object-oriented
doctrine and that each one of these these things is part of
this blue
no Sheena that this forms a class from
which we get the various instances that
our system is actually made up of so each each a little instance
now it is often the case that if these
two predicates here are done correctly you can actually run you do your
prototyping by running the blue thing essentially without any green things
inside of it or you can think of it
being just tiny little green things that come along because of what these are yes
okay the this is it's similar to ADA
except that ADA for instance doesn't have inheritance and so does everybody
here understand what I'm not sure I didn't come to give a tutorial so I'm
not sure what I'm what I was supposed to assume everybody knows about the thing but in most object-oriented languages is
this notion of inheritance that you can
define something very general and abstract like
say a thing called a magnitude
in a magnitude maybe something even more
abs I mean let me use the fresh sheet of paper
start off with something really abstract like a general object and then one of
the operations and an object you might want to have for every object is
equality then a little less abstract you
might have something called a magnitude
one of its operations might be less than
but there still that might not be any notion of what addition is coming down a
little bit further you might have something called a number and it might
have a notion of plus and there might be
a various specializations of numbers so you might have an integer a fraction
these guys might have their own versions of plus the notion of inheritance is
that very often you can get a compact
sorry you can get a compact description
of a wide variety of behaviors by
factoring out behavior as abstract li as
you possibly can you move it as high as you possibly can and occasionally you
may have to give your own versions of things like integer may want its own
version of what plus generally is it may
even want to have its own version of what less than is or may be able to use this general one up here and but
inheritance actually allows you to
cascade descriptions and in a number of
object-oriented systems particularly the AI ones you can actually blend them
together in various ways so you can actually say this this thing is not just
a number it is also a geometric object and inherit a bunch of things from the
side as well so what go to when I talk about doing the
configuration stuff I mean to imply all
the things that you usually do in a typed language but also applied to a
system that has inheritance because it's inheritance in object or any languages
is how you share things the goal of
release it has been the goal for the last 20 years of people who do this and
write very small very reusable very
compact code the goal goal is to make
the things that are shared as abstract
and inheritable as they possibly can be
so you want the smallest number of
maximally independent concepts that you
can Tinkertoy together and have some confidence that the active Tinkertoy is
going to give you something that also still works the whole idea in
object-oriented style is to linearly combine things together not a native
package allows you to subsume some of
the details of a data structure it does
not allow you for instance to define
generic operations which are then
inherited by subclasses because it simply doesn't allow you to subclass and
what that we leaves you add is a single single layer of description for
something which you can get instances from but you can't you generally Eneida
do not write an abstract thing that you're going to get in instances from
because usually these very abstract types like magnitude and so forth aren't
things that you want to use directly they're really placeholders for general
code and strategies and this is a foreign idea in the in the aid of
programming world which is almost entirely concrete yes
well I do to an actually ADA shouldn't
even really call them generics from but it's yeah it's okay anybody can use a
name for whatever they want but it's that's a it's a different way of
thinking about what generic is than what I'm thinking about here the generic power in an object-oriented programming
language is your ability to not just
reuse a concept sideways but also to advance it abstractly the more you can
advance it abstractly the more chance it has of being involved in in an abstract
design the less probability you have of having to recode whole strategy here's
is true is to avoid recoding remember we
got off on this thing I'm just pointing out there's just really just an aside
remark that you could make a very strong
object-oriented programming language by being completely independent of whatever
the methods are actually coded yet that was the whole point behind that
digression that as you build yourself object-oriented tools you're much better
off worrying about the integrity of the
individual objects and then the next thing is can an object be a component
and fit into some larger scale protocol
when I say a component I mean something like let's say a paragraph of text or
generic gear something that actually has a fair amount of meaning behind it might
even have its own inference engine as part of it talking about something that
can be used in a wide variety of cases in which the sharing is more than
parametric you're really getting not
just a class of things you're you're sharing a notion that somebody has come
up a concept a set of concepts that somebody has come up with this obscure
it's the hardest it's actually the
hardest thing to explain simply because I'm gonna try another pass at it one of
the reasons it's hard to explain is that the this notion because of ADA being
called object oriented being taught in school as being object oriented actually
has clouded the the issue considerably so it's very difficult to even explain
why some of these ideas are more complex let me give you another completely
different idea this has to do with
another way of thinking about modularity now in most object-oriented systems the
modularity that is gotten by them is one
that is regard to the state that you put
in each each object what isn't modular is the control
this is another set of issues to talk about so for example one of the things
that you may see when you're looking into an object-oriented programming is is you may see the state and each neatly
encapsulated but you may see control going all over the place what happens
when you send a message the answer is often I don't know goes here goes there and find somebody
here talks to this guy dozens of things happen and I can't even tell whether
control is ever going to get back to me that's often the state of affairs now
what would happen if we actually made control modular
we'd have something more like this where
instead of control going through the objects the objects themselves are
sitting in a sea of messages but they
don't actually originate them themselves how is that possible well one way you
can imagine for it to be possible is for the objects to simply say I need to know
the following put needs in here
now the object there are object-oriented system is one of the ones we've just
developed at Apple one that we did at MIT is an object-oriented system in
which you never send a message okay you
only receive how is it possible well the
system contrives to make the messages get to you by looking at your needs and
looking around to see who might supply those needs
okay is this obscure okay so an example
is suppose your
suppose you're a a button whose job it
is to move the corner of a window so one
of the ways of programming that is for
you to be in a loop constantly looking
to see if the mouse is coming into you okay it's a polling solution to the
problem where somebody is polling somewhere but you're constantly looking
to see whether the mouse is coming in when the mouse comes in then you say okay now I know what to do I'm going to
latch on to the mouse's coordinates and I'm going to tell my window owner
exactly how he should be moved around and so as we move around the corner the
window corner moves around itself and so
that's that's this kind of style of programming control is explicit we have
to poll to find out things that are going on the other way of doing it is I
could just say I need to know when the mouse comes in to me and then I can do
my job this is like an on condition but
it's an on condition that has to be scoped because we can't have it
happening every time the princess the mouse button goes down but we can
imagine that this guy can say okay I have a set of conditions I'm not going
to explicitly look for it I'm just going to tell the world that if I had these
conditions come true for me then I would be able to fulfill my
obligations to the rest of the system I'd know what to do likewise the window
that encloses this guy could also have a
set of conditions that say well if the corner if my corner guy starts moving I
should probably move too I'll change my size if he moves so if
only if somebody would let me know that then I'll go along see what this is like
this is like constraint programming okay we're going from
a procedural style which controls past
explicitly around to a declarative style in which were simply indicating needs
and the system without having to do any problem-solving is picking up the slack
by providing the actual information in the forms of messages HyperCard has this
about half way it's a technique we've been experimenting with at Apple for the
last couple of years and what it looks
like it's able to do is to completely
remove the necessity for actually being able to follow a control flow what does
this mean when you move an object from one place to another
when you move an object from some place into this kind of situation nothing is
going to happen with sorry kind of a
tiny screen isn't it and you put in when you move a new object in here in this
kind of situation nothing is going to happen to that object unless you go in
and recode somebody else in order to send it some messages right and so my
modularity of being able to move an object from one place to another depends
on me being able to do some kind of modification and the system is already
there that's not so good it's good in the sense that this object is guaranteed
not to hurt anybody and it's going to protect its own self from being moved
around but in fact I still have to go in and make some sort of modification in
order to get control the flow when I
put in a new blue guy here
and he has all his needs specified is he
going to be able to run why
because he doesn't have because the whole idea is that he's not intertwined
with anybody else's control he's simply saying I know what I need god damn it
then the question is can the system actually deliver those needs just
because he's a new thing and the answer seems to be yes this is a peek into the
object-oriented programming of the next couple of years in interesting you know
if this the need to do things this way came out of yet another project with
children all of the object-oriented stuff has developed at Park and the
Macintosh user interface came from a set
of designs to try and allow children to
do serious programming on a computer that was what forced object-oriented
programming out into the open the last set of stuff that we've been doing with
children at Apple forced this out of the open because we wanted children younger
than nine to be able to program and children younger than nine have a very
hard time following control flow of course when we're thinking about that
we're thinking well of course they have a hard time following control flow so do we except where you see the problem is
adults are used to suffering so it's why
I like why I like to design for children so designing this new programming
language for children I'm going to give you a little example of some of the stuff programmed in it this notion of
making control completely modular by going to a needs thing became apparent
yes
yes
yeah well it's complicated because I'll
give you I'll give you a simple example and then maybe we can generalize it a
little bit the motivation came from a couple of years ago of you know
wondering why it was so easy to program in spreadsheets and wondering what
spreadsheets would be like if there are more object oriented I've always thought of the spreadsheet cells as being almost
an object and spreadsheet cells have this nice characteristic that they they
are these aren't they in other words the
very act of writing the spreadsheet expression indicates to the rest of the
spreadsheet system what your needs are now usually they're pretty simple needs
they're just I need to know the values of so-and-so cells relative to where I I
am but I got interested in generalizing that and started off with a spreadsheet
system that I did in small talk that had
a spreadsheet optimizer that first started off simply trying to look at
places you wanted to get values from and building a propagation network rather
than executing every cell every for every change in this especially I think
most of you were aware that most spreadsheets today do not execute every
cell there's a propagation network built by the spreadsheet compiler that you
don't see that tries to find you the
minimal number of things that have to be executed every time the change is made
in the in the spreadsheet I started working on that and then the next thing
is to go to billions where you're interested in whenever something like
for instance whatever this is equal to that I would like to do something or
whenever this is less than that I'd like to do something and the I'll just give
you a hint of it
so they start out with this fairly
simple idea that if you have a variable somewhere one of the things that you can
do is to link you can have a link to all
of the different places that ever need
the value of that variable and when this
changes you simply fire off all of these guys and you get the desired result
let's take an expression now so we take
an expression like a is less than B or C
is greater than equal to D and then ask
what we'd have to do to that to make that efficient the answer is you make
this thing into a little tree and at each stage each node of the tree you
hold the very the value of the things so
far
so in this case the a value would be linked through here and you can think of
the tree is pointing upwards
okay and we can presume that this let's
make this an just for the heck of it
see that this is false and we assume that this is true and that this is false
let's do it the other way I make this true
this false so the idea is now if it
changes the insight here is that all you have to do is compare it to whatever the
current value of B is let's say this goes to to true you don't have to
recompute this guy because it didn't change it's already part of this frozen
result and then you come up and recompute this guy so you bait what you
basically have done in this technique is to have sorted the actual computation
that you have to make this this tech this way of doing things is called a
continuously evaluating expression
so it's a conglomerate of things it's actually a little computation engine designed to compute in parallel and only
the stuff that needs to get computed gets computed so you the computation now
the compiler instead of compiling machine code in a system like this is actually compiling a propagation people
are interested in these techniques I refer you to the books on functional programming mostly being written in
England these these days functional program is about this and well-behaved
functional programming languages have the property that you can take any computation that has variables in it and
through a fairly simple compilation change it into a network that has no
variables whatsoever but simply routing x' for values does that sound please
please interrupt me if that's it doesn't sound reasonable is that sound reason
it's intuitively reasonable isn't it because what does a variable as a place
you go to to get a value but of course you can what you really need in a
computation is simply a value delivered you don't need the value to be anywhere except where the operator is so by using
a combination of those techniques you can actually remarkably enough it's
actually it's always surprising when these things work you can actually go to
a thing that's an extreme generalization of a spreadsheet cell that does an
enormous amount of parallel computation but in a way in which you see none of
the interactions yourself
now because of production production system it it's not at odds with the
production system it's on this it's not like ops five as an example which is a
production system I understand people use here it's basically it's orthogonal
to whether there's a production system trying to do things or not
ops five has an example in which the you
have to order the rules yourself to a certain extent in order to in order to
get efficiency and so forth and you can
think of this as something which is independent of whether there are rules
and I didn't say there are rules here what I said is that what we actually are
interested in is whether there's whether there's a set of conditions that can
deliver to me what I actually need one of the things you could implement with
this idea is a production system I'm not
but it doesn't lie it isn't particularly like a production system you could
implement a production system using the idea though do you understand to say it just one it
yeah because it because some production systems have to be executed in sorry
we're getting killed for time we only have a half an hour so what I would like
to suggest is that we just sit still while they change the tape is that okay
should only take them 10 seconds
I was brought up about what do you do
with real time in fact what do you do with time and historically the first
object-oriented programs that were done outside of machine code were done in a
programming language called Simula and Simula had this way of looking at time
the Simula he had
a bunch of objects
one for each entity that you're trying
to model so the
these guys might be modeling pipes
and so forth and the blue the blue guys might be modeling reactors in a chemical
plant or something like that but
basically as far as seeing they're concerned they're all objects they're
all trying to execute at once trying to
get to the new trying to move advance the entire system time and they had this
problem of if you have a system time the system clock that's going on
how can you compute because you might
actually run out of time for computing
before you can actually advance to the next system time so what the similar people realize that they wanted to do
was in between the system clock so
system clock might be one and the next
time any of these guys had to compute
was two so what it would do is it would
do all of the computing in between the
ticks of the clock so the computing was actually outside the space of the simulation so Simula this is a non
real-time situation simular running on a mainframe would compute an arbitrary
amount in between each state change so
guarantee that each as much as it could possibly do it would settle down the
state of each one of these objects during this time when they were all in
process as soon as that that had happened then it would say okay now I
can go to the next time on the clock it is now - what do I have to do now then
the clock could be frozen would compute like mad again advance the clock again
now of course there's a huge conflict
that's the way you generally do it when you're doing object-oriented program
huge conflict between this and when you want to do real-time things because um
real-time things you don't get to stop the clock the clock is moving along
and of course one of the answers is if
you don't have enough computing power to compute before the next time the clock
ticks then you're dead anyway okay so let's assume that we have enough
computing power and just to ask what we
can do an object an object-oriented design to reconcile what time actually
means and the way people generally think
about time and object-oriented programming as time has entirely to do with who can view what when so it's a
viewing operation so let's suppose we have our objects here and we have some
views
attached to the objects we can ask what
is it like if one object is viewing another
the first question I just should ask everybody this is absurdly simple once
once you see it but the first question is when should I not be viewing the
object when it's in transition right so
it means I have to have at least a two-phase clock so the object really has
two two states it's going in one is it's trying to settle itself to what it
thinks as a stable state and the other one is one that's going to allow itself
to be viewed okay so mmm let's we can do that and
it's sort of a sort of a diagram here
so here's the here's the object and
here's the view so what we're saying is
that when the object is computing we can't view and when the object is
viewing we can't compute
so we're gonna have a bunch of these little phases like this now that's not
always useful sometimes this viewing
thing is very long so the viewing can
actually hold up the progress of the computation and so what can we do there
this is suggested by actually this model so far just just curious to see if it
suggests anybody what would be a good thing to do if to break this rigid
synchrony we have what can you do yeah
we could that's what's called slippage so we could actually arrange a slippage
model so we let the as before as we had
before we let the object compute and
what we take is a copy of it that we let
the viewer view
and so the object in simulation can have an quite a number of phases as it goes
along and every once in a while we get
to view it
we take let's say we take this guy right here okay now what's interesting is in
an object-oriented system this slippage model is usually computed automatically
by the the object in the view both of
which are objects when you hook the view up to the object what they do is
exchange information because one of the things that the object has some sense about is how long it takes it to settle
it state typically the view has some sense about how long it takes to
abstract the view and so they actually arrange and build a little buffer in
between themselves and that buffer has the actual amount of information to
allow the slippage to happen so the way this intertwines with doing real-time
and deterministic computing is almost all real-time solutions to queuing
problems knowing some sort of determinism they actually aren't
completely deterministic what you usually do is you're saying I have some
limits that I want to guarantee the
computation is going to take place in between it I'm going to do enough buffering to make sure that those limits
get down so for instance when you're doing real-time reading of records from
Fast disks and so forth you set up buffer areas because you don't want to
have to have real kind time constraints in every part of your real time
computation in an object-oriented system these are usually handled by having
what's called a viewing model small talk has one called models views and
controllers which is quite general and has the facilities in it for generating
all manner of slippage models in between by you putting on the outside what it is
that you actually need to know from these objects at some point of course
you can break it down there's no real time system you cannot break down but
this gives you the maximum amount of automatic buffering that the system can
generate without having to be explicitly programmed
yeah very very large how can you well
the way that's usually done is by trying to again it's that you know the stuff
isn't a panacea but what you usually try and do is when you write a device driver
in an object-oriented language what you try and do is ask what devices are
likely to be like this device now what is this like so when you write when
people do a user interface and an object-oriented language usually they
don't write a driver for the mouse or for a tablet or anything else what they
come up with is an abstraction of what it means to it's usually call a pick
device it's an abstraction of what it means to be able to do selection and
tracking and then one programmer at one
time writes code for that and then if you come up in a system and it has a
specific device you may have to write a line or two of additional code but it's
written in a subclass below that the main driver is already written already
been written in it's um it's not just doesn't just serve as the code for what
you're doing it serves as the model for how you treat the actual devices when
they're put in there so I'm part of the part of the the charm of the system is
to be able to get away from the from the particular as much as possible and
program as much as possible in the general case the whole act of
subclassing is basically saying to something I want something just like you accept and the theory behind this which
seems to work is that it is much easier to program differentially than it is to
program from scratch it's much easier if you see something that is like what you
want and you can get it in a way that um doesn't damage anything
else then if all you could make have to make as incremental changes to it then
you should be way ahead that's not always true you know there are always
pathological cases always pathological cases but generally speaking like this
is an example where the whole strategy once it was thought out was realized oh
yeah this is something we can use it's not just for user interfaces we can use it for every kind of device drivers we
can use it for every kind of real-time stuff where we have two different clocks
going at two different rates and we're trying to synchronize in some way why
should we have to write this over and over again why should some program we have to figure it out over and over
again it's not that we have the solution to every possible problem but what we're saying is we've got a solution it's the
80/20 rule get a solution to the eightieth you know 80% of all of the
code you're ever going to have to write if you can put that into a superclass
and then distribute it automatically as part of the solution so small so small
that when you when you're doing a viewing operation and small talk you
don't even have to think to yourself whether you should worry about
synchronization or not until long after
you may decide that you need it then you just have it oh it's already in here I just got it for free when I subclass the
class view well try think like I say an
ADA it's a little bit harder because you can't do those super classes that have
all those goodies lying in there you have to you can do it with a macro
operation people do to super classing and ADA by making macros that allow them
to do a kind of copying and stuff
No well in small talk no you can small
talk allows you to dynamic basically small talk has no concept of loading
code so everything is there dynamically into there and at any point
you can go in examine any piece of code in the system you can rewrite any piece
of code in a production case you really don't want to allow just anybody to go
in and rewrite a superclass because of
course the work it's really bad if they if the superclass starts doing something
different generally when people go to rewrite a super classes to improve the algorithm
that hundreds of applications are already using like you may go in and
improve the sort algorithm yeah
right that's why I was talking about the
configuration so my belief is that in a production case you must have something
like the configuration setup or else
it's just too fragile it's not it's it's
fragile in a funny way because in small talk we used to give $5 bills away to
anybody who could crash the Smalltalk system it's very hard to crash an a good
object-oriented system because there isn't anything you can get to that where you can actually hurt more than one
layer of thing and then the system's says hey wait a minute what are you
doing like in the small talk debugger as
you'll discover I think there's a tutorial coming up has the anytime
there's any kind of an error the system
doesn't crash there was there's no concept of crashing the error is simply
set aside as just another process and once when we were debugging the system
we found 1,700 suspended errors waiting
for somebody to take care of them and so I'll talk didn't care you know it's just an error comes up fine you know um set
it aside it's right there you can go back to it anytime you want but keep on running it just keeps on running so the
that's one of the reasons why we didn't do a configuration language because we
were programming in the small and you couldn't hurt yourself so as the the worst he could have
happened was something annoying they would come up but it wouldn't crash what
you're doing so somebody who fixed it or make a note of it but I think that's
intolerable in the production sense
where you really don't well you have people who aren't part of the same group
and so forth that you really have to have a configurations language and the super classes are the ones that you want
to have most understood and most nailed down in particular the for instance in
small talk it's often to make things like the sorting stuff parametric so
you're actually sending in sorting objects that will do sorting for you
as parameters rather than even putting
that in embedding that into the the code just because you don't want somebody to
try and change it that way you'd rather have it be something separate that you
can dynamically bind in really good superclasses don't do much except act as
really good binding mechanisms for other
stuff that's going on
yeah
yes there is you can but again the the
original the original small talk for example didn't use a kind of procedure
call in order to send it really acted as
though you're on a network and if you're interested in what order things had to
be done in they they could actually be stamped and recued at the other end and
people do do that when when you run small talk over the network people make
the connection to the network by having what are called phantom objects and a
phantom object is a stand-in from the object you're trying to send the net right because you're always sending a
message to something so suppose yours suppose your
so if you're over here and you think
you're sending a message what you think you're doing is sending a message from
object a to object B and but they may be
on different machines and so what may be really going on is object a is sending a
version of object B
which is really going over the network to the real be again these are called
Panem objects and usually there's just one class of them and whatever you're
distributing a copy a computation usually the environment for the objects
just consists of a few local objects and
the rest of them are phantom objects the phantom objects take care of all the the network stuff and synchronizations and
reorderings and other kinds of things that you have to do when you're going to slower slower media that's a
well-established technique and any good object-oriented language you can set
that up literally in an afternoon today
oh it's quite instructive to think about what it means not to send just a message
but to send an object from one place to another what part of its environment do you have to bring along with it in order
for it to be understood see in theory sending an object let's say we send
objects see across
well si may not be terribly understood
on the other side on the other hand it's still active so if your network has the
rule as ours did it park that whatever an object shows up and its class isn't
there its class a clone of its class
gets sucked over with it so you compare
that to sending a data structure which is sending bits and how fragile they are
because you're not sure that there are procedures at the other end to know them here you're ensuring that either nothing
at all happens or the right procedures are actually automatically sent along
and so you can it's remember that story I told the beginning of the Vosges 220
that's exactly how the training command protected their their tapes you just
make sure the procedures go along with them and it's quite easy using these
phantom objects to make that automatic so you can think of the network of
objects as constantly rebalancing itself as to where the code actually is
I think I believe that's true and from
Park yeah it's written it's been written up
yeah well my message to you is this is the same reason I told you the Arthur
Andersen story is they have exactly the same you know their their attitude to me
was kind of interesting they said they went to several phases and this is
probably you're in one of these phases right now as well it went through one
phase where the first phase with objects it was like magic God all the things you
could do code is so small the second phase was complete disillusionment when
they realize that for instance small talk which they were using as a model
didn't scale they said you know what is you know is this the emperor's new
clothes or what and I said no it's just because the part of the reason small
talk wasn't built to scale was simply because we were able to do an enormous
amount with very tiny programs and we're
designing for children anyway and when
you want to use these ideas and they're in the in the large I believe that you
have to do a little bit more then you can go out on the street and buy that's
what I'm my message to you is that and
it was to Arthur Anderson that you know a lot about what it can once you've
learned the object-oriented style which I believe is the right way a protecting
state of the right way of making components the right way of making urns
superclasses right way of sharing there's a whole bunch of right things about it in order to make it work in the
large you then have to sit down and protect that by coming up with a
configuration language and you can do yourself a lot of good by doing that
carefully because the configuration language can include languages that you
already have hundreds of programmers that know how to write in in other words
the configuration language can be a way of protecting programs that are already
written in COBOL and Fortran as well as
new programs written in Ada it should be a really separate way you think of isn't
and the architecture is opposed to the bricks of actually building the thing
the architecture to me rules life is an architecture it wasn't
as early as the turn of the century there are people that thought memory there's the stuff called protoplasm
written about in books was supposed to
be some special kind of material that you can build living things out of because people didn't believe that
ordinary chemicals could bake you could make a living thing out of it wasn't
really until 20 or 30 years ago that it was really shown quite definitively that
we actually are just an architecture in fact we know now that the atoms in our
body are actually recycled about every seven years so you and I as individuals
are patterns in space the material is moving through we don't have the same
atoms in our bodies that we had seven years ago we are a pattern and
interesting things made out of the patterns you have - you know I have to
have some understanding of the bricks and stuff which I think everybody is getting now but at some point you'll
realize that the power of this stuff isn't from what the bricks do and that
the bricks are have integrity the power
of the stuff is from the architectures that you can create and the
architectures have just been scratched now up until really a couple of years
ago there probably been less than a god I don't know 100 or 200 people over two
decades actually doing this stuff so
it's the and the problems that have been
worked on have tended to be small the reason I believe that object-oriented
programming works well in the large is simply because it works well in the
biological world and I see no reason why it is going to fall down in any way when
we go large but in order to in order to make it work we have to either look at
the biological world war which is the
biological reason of urging can a configuration language or we have to go
after for other reasons of just realizing hey this stuff gets fragile at
this point what do we actually need and the answer is a configuration language
but I think that there might be some immediate benefit these ideas of
object-oriented design where you have existing systems that because it would
nature the islands of automation approach have gotten tremendous ly complex and you
need to be able to characterize various things possibly the concept of objects
to help you do that and to help them understand what are the objects of one
of the Linc right well I'm trying to think of it was
Rudolph's irken that said you can't if you want to be a piano player you should
spend half of your time reading books and his his point was is that if you
spend all of your time just learning to move your fingers you have not absorbed
any contact the context necessary to play any real piece of music that
there's there's something else besides the practical application of the of the
technique and I think that the somebody was asking me at the break it was a very
good question actually which is and the
it had to do with she doesn't sounds
like objects make you do a lot of design and anyway but you know it wasn't said
stupidly at all it's just said isn't that hard and I said yes it is hard and
it's hard whether you've got objects or not the main reason is that objects
provide both an excuse for designing and they also give you a framework for
holding the design every little bit of design you do you get rewarded in an
object-oriented system for having done it you really get rewarded where's it's
hard to get rewarded in a in a procedure data structure system because often the
design has nothing to hang itself on there can be local good things but you
can't propagate the design forward the way you can in an object-oriented system
I don't know because I haven't hung most
you know Edward de Bono's says the problem with most American companies is
that when they get in trouble they redouble their efforts so you know the
idea is that we're basically too industrious for our own good and once we learn a technique we tend to put our
head down and just fight like mad rather than trying to smart our way out of it
like I said I particularly efference to
me I had actually seen these techniques and actually programs using some of these techniques for five years for a
period between 1961 and 1966 before
Simula hit me on the head and hit me on the head just because at that point I
had a problem that was much harder than I wanted to program it was the first
time I was willing to actually see that was when I was going through insane
minutes and I said to myself holy cow this is so you know there's just nothing
here all I have to do is this and that I'm done you know all of these things
fall in I was actually programmed in the game of space war you know which is one
of the first video games but it wasn't even a video game back in the in the 60s
and they're all of these it's very hard to do in an ordinary language because you have all of these spaceships and you
have planets and you have torpedoes and when I was looking at Simula I was
trying to get figure a way out of doing
this I didn't want to do it in 30 pages of alcohol or so and I was trying to
figure out a way and all of a sudden it occurred to me that every single thing in space war and Simula was the same
thing the only thing was different was the costume they were wearing the
planets were the same the spaceships were the same the torpedoes were the
same there was like one line of code difference in each of their behavior and
they all had to obey Newton's laws they all were interacting with each others in
exactly the same way it was trivial and I wrote that program and a half a page
of code and I never looked back since because the you know the that is the
thing if you don't find this folding up of complexity into simplicity then
either you're working on a truly hard problem which really really do exist
or there's probably a rotation of the situation that you haven't examined yet
you're probably still thinking the old way in thinking in terms of particulars
rather than generalities we're so used to programming up each specific thing
that's hard for us to think of avoiding that then we only have to to program up
one general thing and then write a couple of lines of code for each of the
particulars and we're done that's a really good test in this stuff and it
accounts for the religious fervor of people who have had this happen to
themselves as after pounding your head away on a system to have it fold up like
like there was nothing there it is the most amazing thing they have an
operating system go away to something that is practically a clock which is
what it is in an object-oriented system because what do you need in an operating system well once you've got the ability
to sustain objects and stuff like that you practically only need a clock you
only need to get control routed around and everything else is written essentially as an application on top of
that kernel that's a very modern way of looking at things and it's a terrific
way of thinking about doing stuff
okay yeah
that's a very good question some of these idea a relational database
everybody knows what a relational database is right okay so the the there
are several things a relational data an item in a relational database has fields
it has some of some of the things and depending on the data dictionary that
the relational database wants to sustain you can occasionally do some integrity
constraints the most relational database is friend for example is very difficult
to do the following thing in a data record and that is make sure that Joe
blows age is always the right one when you ask it because when you ask
somebody's age in a relational database what it expects to do is to go to a
field and find a number and bring it back to you right in an object system
what you would have there is you'd sent the message age to the object and it
could just go to a field and bring back a number but a smarter one would
actually look at the guy's birthdate and compute his age for you right then and
so you'd always get the right answer every time you asked aged you would
always get the right answer from the object you would not get it from the relational database unless you're doing
careful updates that's one difference
the other difference is that in a in a relate in any kind of a relation it is
extremely difficult to embed code although people sometimes do by
embedding it on the outside of the database rather than on the inside with
it so for doing a dynamic simulation for instance is quite difficult a good way
of understanding where relational databases is going to go comes out of
one of your own products and an industry that McDonnell Douglas is one of the
leaders in Amanda's CAD CAM CAD cam can't be done on relational straight
relational databases there simply aren't enough hooks in there to deal with all
the things it's not you can't store the data so you can't deal with all the
other things that the relational database database can't store that
cad/cam requires so object-oriented
servers like the gemstone or this the
ontological rated servers are ones that
the CAD cam industry is going towards now these allow you to do all the things
that you're used to doing with relational database but also give you this extra level of abstraction that you
get from objects what's nice about it I think for people worried about
transitions is that there's a fairly reasonable transition almost everything gets better when you go to an
object-oriented database server for instance I think most people would like
for instance to have joins be real
things rather than a made-up thing for
the moment and they can be in an object-oriented database most people
would like to have views be things that you can add it back through or views
that you can view whereas a view in a
relational database is an extremely weak notion of the whole notion of what view
is where in an object-oriented system is extremely easy to have a view look like
the set of stuff itself and so you can put another view on top of it and
cascade them and so forth and all of those things are being done right at
this moment with object-oriented servers
excuse me yeah I think for also because
the the tutorial it's going to happen in a couple of weeks is going to be one of the people from this digital company the
company that does small talk V I want to just mention again that besides the fact
that it's cheap small talk V I think is only $99 on the IBM PC and 150 on the
Mac so it's the cheapest small talk they have by far the best manual none of the
other manuals are even in second place because they actually don't believe that
you understand about object-oriented programming in the beginning of the
thing they actually write the manual there's a splendid tutorial hands-on tutorial for getting versed with all of
the object-oriented lore and sub-classing and building a very
powerful little application another thing that they give you for free in
with small talk I don't have any stock in the company I haven't made a cent on
small talk but what they do is they also
give you for free a full-blown implementation of Prolog Edinboro Prolog
written in small talk okay and just to
give you an idea this whole implementation of Prolog written in small talk with its own user interface
its own browser its own debugger and everything else is less than 20 pages of
code okay and if you've ever tried doing
anything like a programming language like this is a convince err okay and it
uses object-oriented programming for what it's really it uses the fact for
instance in small talk everything is an object everything is an object and
protected including the things that you think of as stack frames and ordinary
languages that you can't even get to how is it the bugger written in small talk
well this stack frame is simply an object so you simply write a method that
allows you to ask the guy well what do you what do you have here what do you
have here can you advance your PC what see I mean I mean the debugger is like a
page and a half long because it actually is part of it's just a subclass of class
stack frame prologue is so simple in small type because they actually take
the stack frame as an object and implement prologues control structure
directly in using the small talk using
small talk sone stack frames but using a non stack protocol which is what the
Prolog backtracking requires this is gorgeous stuff and it's done completely
without impinging on the integrity of
small talk itself the two systems are integrated together and so you can do
Prolog unifications into small talk variables and vice versa so it's a
perfect example of what an embedded system in an object-oriented system looks like they give it to you for free
you can do real work in it if you just want to use it but people are really
interested in why this stuff is powerful that's an example of where the power of
it is actually concentrated and used by some design thinking here's another one
most object-oriented languages don't
have a complete model so for instance
when Simula for instance has classes so
you have a class paragraph or a class
string but Simula doesn't have classes
be objects so if you have an object-oriented one of the choices you
could make is to have everything in the language be an object why not that means
if there are things called classes there
must be a class class a class whose instances are the classes okay that
sound shaky let me just let me just draw it cuz it's
so I'm going to draw classes in red so
this might be integer might be fraction
might be paragraph this might be document this might be file and there
are instances I'll draw in green this might be three and this might be for
this might be three quarters this is a
paragraph of text and so is this one
this is a whole document this is a whole file here's another one they have lots
of instances of these classes they've been on Simula these red things in an
ADA these red things aren't around at runtime they're like macros they just help
create the structures underneath that these green guys can work with but in
small talk these are really objects and
the question is is if they're objects what are they an instance of what is
common to all of these things somebody tell me they're all a class so
what what's common to all of these what do they do they all make instances right
I mean they're the thing that holds all of the information that's necessary to
make multiple instances and so you can imagine that there might be a thing
called class class whose own instances
are these guys
okay that sound reasonable why not okay
down remember I can subclass what do you
think it might mean to sub class class class let me do that let me use another
color here
so I'm going to sub class class class here look just in general what is the
sub class of class class going to be able to do it's going to no it's not
gonna make some classes it's gonna make be able to make classes like these guys
plus something else then I'm gonna add right there because anything that's of
class class is going to make classes so any subclass of it is going to make
classes now here's an example of something we did at parc many years ago
we wanted to do a system in which every
instance was data-driven okay in other
words we wanted to do a data flow system
inside of small talk in which the every
thing that happened to some variable in
an instance could be propagated to the next thing that meant that every instance had to have besides the places
in it that an ordinary instance has here's what an ordinary instance looks
like it's a thing that has slots in it for holding values and plus what we
wanted to do was to tack onto that some
pointer information that would link all of these guys together so we'd actually
have a data-driven network here now how do you suppose we
did that sub class class class
right the various places I could do that but what if I did it up here and put
that information in here and now every
every class that this guy makes whatever
it is is going to have the property that the instances of it regardless of what
these guys are as I go along making up new classes for this kind of thing and that kind of thing every one of them is
going to have the property that the instances are going to be instrumented this way see how high that change was
made what I did is I actually change the meaning of what class this was in the
system with one operation I just subclass a very very high-level guy and
all of a sudden I got essentially a new small talk with a completely different
strategy for how these things strategy independent of what the new classes are
going to be okay that's the power of
this stuff it's not the direct stuff
that you can do that's so appealing now it's the meta stuff that you can do
that's so incredibly powerful because you can literally when you have a new
idea that's important you can literally distribute that idea over the entire
universe with just a few changes in a
system like this well let's I think we're about done let
me let me give you a one of our favorite
stories and as a winch and Winston
Churchill story widget Winston Churchill jokes always have them at a party after
a bunch of whiskeys and I'm sure everybody knows the one of
the he was incredibly drunk and a woman
came up to him at two o'clock in the morning and said mr. Churchill you're
disgustingly drunk and he looked at her
said and you Madame are indescribably ugly but in the morning I'll be
indisputably sober
so this particular this particular Churchill joke a little earlier on the
party he hadn't had quite as many whiskey's and the hostess of the party
came over to him quite agitated and said mr. Churchill I'm just really upset I
don't know what to do I saw a famous Earl over there steal some of my silver
salt shakers what should I do Churchill thought for a minute and stuck his cigar in his mouth and went over to
the Earl along the way he took a salt shaker himself and put it in his pocket
and we got over to the Earl took it out of his pocket and said I think we've
been noticed perhaps we should put these back so that's my version for why we won
World War two in other words if you want to get people to do something to go
along with you you have to involve them in the same conspiracy and
object-oriented programming is a kind of conspiracy that people are just finding
out about it I hope I've been able to involve you in a little bit and I hope you will involve others thank you
[Applause]