Talk:Abstraction (software engineering)

From Wikipedia, the free encyclopedia
Jump to: navigation, search
WikiProject Computing (Rated Start-class, High-importance)
WikiProject icon This article is within the scope of WikiProject Computing, a collaborative effort to improve the coverage of computers, computing, and information technology on Wikipedia. If you would like to participate, please visit the project page, where you can join the discussion and see a list of open tasks.
Start-Class article Start  This article has been rated as Start-Class on the project's quality scale.
 High  This article has been rated as High-importance on the project's importance scale.
WikiProject Computer science (Rated Start-class, Top-importance)
WikiProject icon This article is within the scope of WikiProject Computer science, a collaborative effort to improve the coverage of Computer science related articles on Wikipedia. If you would like to participate, please visit the project page, where you can join the discussion and see a list of open tasks.
Start-Class article Start  This article has been rated as Start-Class on the project's quality scale.
 Top  This article has been rated as Top-importance on the project's importance scale.

Old topics[edit]

I think the current page misses the whole point. Making some minor adjustments to correct worst mistakes.

The words from the article could be divorced from the OOP POV thus, simply making it a programming language statement, as if a programmer were thinking about working on a project.

In computer science, abstraction is the analog of abstraction in mathematics. The mathematical technique of abstraction begins with mathematical definitions; this has the fortunate effect of finessing some of the vexing philosophical issues of abstraction.

Abstraction allows programmers to think simply about a problem, by deferring unimportant detail for later, while still allowing thought about more important goals, in stages of thinking, not all-at-once. For example, in both computing and in mathematics, numbers are concepts in the programming languages, as founded in mathematics. Implementation details depend on the hardware and software, but this is not a restriction because the computing concept of number is still based on the mathematical concept.

During software development, the client typically understands the application, and can understand the use of the work. The semantics of the application dictate the structure of the implementation.

For example, Linda abstracts the concepts of server and shared data-space to facilitate distributed programming; that is, the semantics of distributed processing were implemented in Linda. In Java, abstraction takes place at the level of extended data types. Such types are called classes, and objects are instances of said class. The concept of abstraction is itself a declarative statement in programming languages such as C++ or Java, using the keywords virtual or abstract, respectively, to decorate the class name. After such a declaration, it is the responsibility of the programmer to implement a class to instantiate the object of the declaration. Or, if the specification language is UML, for example, the abstract classes are simply left abstract during the architecture and specification phase of the project.

Thus, in the architecture stage, one could define an abstract data type called lookup table, where keys are uniquely associated with values, and values may be retrieved by specifying their corresponding keys. Such a lookup table may be implemented in various ways: as a hash table, a binary search tree, or even a simple linear list (which is actually quite efficient for small data sets). As far as client code is concerned, the abstract properties of the type are the same in each case.

The interface between components of an implementation forms a contract on agreed behaviour between components of the application. This interface can be sybmbolized in various ways, such as Ward Cunningham's CRC cards.

Some other languages that implement data abstraction include Ada and Modula-2.

[PROPOSE moving this back to the OOP page]

The above paragraphs provide a substantially better introduction to abstraction than what is presently shown. If no one objects I will be making a **HUGE** change by replacing the current introduction in its entirety with this one. I plan to do this next time I visit this page. Vonkje (talk) 20:07, 26 August 2009 (UTC)
What proposal exactly are you talking about? Pcap ping 07:53, 27 August 2009 (UTC)

Abstraction in object oriented programming[edit]

Object-oriented languages are commonly claimed to offer data abstraction; however, the inheritance concept tends to put information in the interface that more properly belongs in the implementation; thus, changes to such information ends up impacting client code, leading directly to the fragile base class problem.

[propose a REPLACE of the Animals code with some Object diagram]

I agree with the replace suggestion. IMO many of the computer science articles related to object-orientation do this, they jump into psuedocode or even worse C++ code examples that get into all kinds of hairy etail not all that relevant to the article but they never bother to explain the basic idea. I'm pretty technical, I still program in Java and I've been programming since the 70's and I usually find those examples too detailed and hard to follow. If they are hard for met o follow than they are hard for the vast majority of people who come to these pages. --MadScientistX11 (talk) 14:15, 4 August 2014 (UTC)

Further Reading[edit]

  • Abelson, Harold, Gerald Jay Sussman with Julie Sussman. (1996) ISBN 0262011530 Structure and Interpretation of Computer Programs (Second edition). The MIT Press

[LEAVE this in the abstraction page]

This article needs more inline citations. If people know of references that relate to the topic a far better contribution than putting them in Further Reading is to add them as a reference to the appropriate part of the article. If they AREN'T useful to serve as a reference for any of the article than probably they aren't relevant or important enough to be added to Further Reading in the first place. --MadScientistX11 (talk) 14:17, 4 August 2014 (UTC)

See also[edit]

The opposite of abstraction is instantiation.

This article (or an earlier version of it) contains material from FOLDOC, used with permission. Modify if needed. 22:50, 1 Nov 2003 (UTC)

I had a real hard time following your comments I can't tell if you made all those comments or not. I made a recent change to the definition because it seemed to be poorly defined, and I researched it for about two hours online and in my text books. The best I could come up with was the definition found in a textbook used in MIT, which I referenced, and this is the page from that book:

Your comments about not including a reference to OOP seem to me to be oriented towards optimized for purity at the expense of usefulness. As abstraction is a necessary concept of OOP and OOP has become mainstream, not referencing OOP would be incomplete though the comments about OOP listed above are definitely POV.

While the animal code is not the best, code is helpful and I would recommend it stay or be replaced by better. Adding a diagram could help though.

FWIW MikeSchinkel 11:15, 2 Nov 2003 (UTC)

Layers or Levels of Abstraction[edit]

Shouldn't the heading title "Layers of Abtraction" really be "Levels of Abstraction"? If no one objects, I will change it. Montalvo 01:18, 29 November 2005 (UTC)

The database layers mentioned in the text are not layers of abstraction! —Preceding unsigned comment added by (talk) 14:22, 11 March 2009 (UTC)


What does the use of the word "others" mean in the first sentence? - KitchM (talk) 06:12, 30 August 2009 (UTC)

No idea. There were/are a bunch silly vague statements in this article. Feel free to fix them. I've fixed some in the lead (see next talk section), but undoubtedly there are more in the body, as you discovered. Pcap ping 19:03, 30 August 2009 (UTC)

Better Definition[edit]

There should be found a better definition than that which is given. It lacks the clarity and simplicity necessary to explain it to the layperson.

One might start with these other definitions: 1. an abstracting or being abstracted; removal 2. formation of an idea, as of the qualities or properties of a thing, by mental separation from particular instances or material objects 3. an idea so formed, or a word or term for it “honesty” and “whiteness” are abstractions 4. an unrealistic or impractical notion

And for "abstract": 1. Considered apart from concrete existence: an abstract concept. 2. Not applied or practical; theoretical. 3. Difficult to understand; abstruse: abstract philosophical problems. 4. Thought of or stated without reference to a specific instance: abstract words like truth and justice.

And yet computing is all about very exacting detail that is applied, practical and concrete.

Perhaps the word "abstraction" within the field of computing may be better defined within the ideas of simple ones and zeros, as well as within the idea of grouping efforts together by finding commonality, and thereby reaching a common point of reference for the definition.

Further, the introduction of the concept should include the reasoning behind using it in the first place within this particular application. - KitchM (talk) 06:35, 30 August 2009 (UTC)

The intro to this article was even more impenetrable a couple of weeks ago. I've done a little work on it (before you posted the above), which covered some of your suggestions, e.g. finding commonality. Feel free to improve the presentation further. Pcap ping 18:34, 30 August 2009 (UTC)