programming_general:object-orientation_fundamentals
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revisionNext revisionBoth sides next revision | ||
java:object-orientation_fundamentals [2020/09/11 21:38] – [Why object-orientation] mithat | programming_general:object-orientation_fundamentals [2020/09/14 01:36] – mithat | ||
---|---|---|---|
Line 1: | Line 1: | ||
====== Object-Orientation Fundamentals ====== | ====== Object-Orientation Fundamentals ====== | ||
+ | ===== Why object-orientation? | ||
+ | **Object-oriented programming** came about to support **object-oriented analysis and design** (OOAD). | ||
+ | But why objects? | ||
+ | OOAD was created to try to solve some of the issues involved in designing and managing large applications. | ||
- | ===== Why object-orientation? | + | It represents a shift in the way you typically approach a problem using procedural/ |
- | Object-oriented | + | |
- | OOAD came about to try to solve some of the issues involved in designing and managing large applications. It represents a shift in the way you typically approach a problem using procedural/ | + | In object-oriented thinking, you start with, "What are the components (objects) that make up the problem?" |
- | While it is possible to design systems (i.e., | + | While it is possible to analyze and design systems (i.e., |
+ | |||
+ | So, OOAD facilitates a higher level of modular thinking. And, especially with an object-oriented language, it allows for very effective project management of large applications. | ||
- | OOAD facilitates a higher level of modular thinking and especially with an object-oriented language also allows for more effective project management, especially across a team of developers. | ||
===== Object-oriented concepts ===== | ===== Object-oriented concepts ===== | ||
Line 46: | Line 50: | ||
==== Encapsulation and protection ==== | ==== Encapsulation and protection ==== | ||
- | As a user, I change the state of the oven by engaging one or more of the operations in the oven's interface. In other words, I'm not expected to open up the oven and hack at its guts to make the magnetron work at maximum level for whatever time I want. As a user of the oven, I don't need to know how a magnetron or the power supplies work, and if I am a typical user I don't really care. I only need to know what changes in state to expect from the "cook 1 minute" | + | As a user, I change the state of the oven by engaging one or more of the operations in the oven's interface. In other words, I'm not expected to open up the oven and hack at its guts to make the magnetron work at maximum level for whatever time I want. As a user of the oven, if I am a typical user, I don't really care. I only need to know what changes in state to expect from the "cook 1 minute" |
- | Along the same lines, when I change the clock' | + | Along the same lines, when I change the clock' |
This idea of "not caring about how it works---I only need to know what it does" is the essence of **encapsulation** (literally, "to place in a capsule" | This idea of "not caring about how it works---I only need to know what it does" is the essence of **encapsulation** (literally, "to place in a capsule" | ||
Line 54: | Line 58: | ||
In fact, even if I wanted to get at, for example, magnetron inside or directly change the clock' | In fact, even if I wanted to get at, for example, magnetron inside or directly change the clock' | ||
- | The Keeping someone out of stuff they should not be allowed to access is called **protection** or sometimes **information hiding**. In many (but not all) languages, properly hiding things the user has no business getting into is considered part of encapsulation. | + | Keeping someone out of stuff they should not be allowed to access is called **protection** or sometimes **information hiding**. In many (but not all) languages, properly hiding things the user has no business getting into is considered part of encapsulation. |
==== Objects ==== | ==== Objects ==== | ||
Line 61: | Line 65: | ||
Object-oriented languages are languages that let you create self-governing entities. Such self-governing entities are called **objects**. | Object-oriented languages are languages that let you create self-governing entities. Such self-governing entities are called **objects**. | ||
- | To put it another way, an object is a program entity that encapsulates state (via attributes) | + | To put it another way, an object is a program entity that encapsulates state and behavior for some meaningful abstraction. |
==== Class-based object-orientation ==== | ==== Class-based object-orientation ==== | ||
{{: | {{: | ||
- | I have a Farberware 4241 microwave oven in my office. It's small, but it gets the job done. There is a factory somewhere making these by the thousand million. They make all the Farberware 4241s from a master plan, a plan that defines what the Farberware 4241 //is//. In object-oriented design terminology, | + | I have a Farberware 4241 microwave oven in my office. It's small, but it gets the job done. There is a factory somewhere making these by the thousands. All the Farberware 4241s they make come from a master plan: a plan that defines what the Farberware 4241 //is//. In object-oriented design terminology, |
Languages that support **class-based object-oriented programming** let you define classes at a very high level. Once you've defined a class you can then create **instances**: | Languages that support **class-based object-oriented programming** let you define classes at a very high level. Once you've defined a class you can then create **instances**: | ||
Line 74: | Line 79: | ||
==== Prototype-based object-orientation ==== | ==== Prototype-based object-orientation ==== | ||
- | There is another kind of object-orientation called **prototype-based object-orientation** or **prototype-based programming**. This is the kind of object-orientation used in JavaScript and some other languages.((C++, | + | There is another kind of object-orientation called **prototype-based object-orientation** or **prototype-based programming**. This is the kind of object-orientation used in JavaScript and some other languages.((C++, |
- | Python is inherently class-based, | ||
==== Ovens and code ==== | ==== Ovens and code ==== | ||
- | So, you get the idea of objects in the physical world. Learning how this relates to computer code is your next step. | + | So, you now get the idea of objects in the physical world. Learning how this relates to computer code is your next step. |
Copyright © 2011-2020 Mithat Konar. All rights reserved. | Copyright © 2011-2020 Mithat Konar. All rights reserved. |
programming_general/object-orientation_fundamentals.txt · Last modified: 2020/11/15 00:03 by mithat