Skip to main content

Currently Skimming:

4 Abstraction, Representation, and Notations
Pages 65-78

The Chapter Skim interface presents what we've algorithmically identified as the most significant single chunk of text within every page in the chapter.
Select key terms on the right to highlight them within pages of the chapter.


From page 65...
... Indeed, abstraction is a quintessential activity of computer science-the intellectual tool that allows computer scientists to express their understanding of a problem, manage complexity, and select the level of detail and degree of generality they need at the moment. Computer scientists create and discard abstractions as freely as engineers and architects create and discard design sketches.
From page 66...
... Software designers create conceptual subassemblies with coherent, comprehensible capabilities, similar to Hora's subassemblies. But whereas Hora's subassemblies might have been selected for convenience and physical organization, computer scientists are more likely to create structure around concepts and responsibilities.
From page 67...
... , but rather specific conceptual units designed for specific tasks. We represent these software abstractions in a combination of notations -- the descriptive notations of specifications, the imperative notations of programming, the descriptive notations of diagrams, and even narrative prose.
From page 68...
... . Programming languages of the 1960s developed notations for describing information in somewhat more abstract terms than the machine representation, so that the programmer could refer directly to "flag" and have that reference translated automatically to whichever bits were appropriate.
From page 69...
... He elaborated this idea as "information hiding." Parnas subsequently spent several years at the Naval Research Laboratory applying these ideas to the specification of the A7E avionics system, showing that the idea could scale up to practical real-world systems. This was one of the precursors of object-oriented programming and the marketplace for independently developed components that can be used unchanged in larger systems, from components that invoke by procedure calls from a larger system through java applets that download into Web browsers and third-party filters for photo-processing programs.
From page 70...
... However, the possibility of reasoning formally about a program changed the way people thought about programming and stimulated interest in formal specification of components and of programming languages -- for precision in explanation, if not for proof. Formal specifications have now been received well for making intentions precise and for some specific classes of analysis, but the original promise remains unfulfilled.
From page 71...
... Further, many of the properties of interest about a particular program do not lend themselves to expression in formal logic. The second approach was to work hard on a simple common programming language such as Pascal to obtain formal specifications of the language semantics with only modest changes to the language, with a result such as Euclid.
From page 72...
... Later languages that enforced type checking ran into programmer opposition to taking the time to write declarations, and the practice became acceptable only when it became clear that the type declarations enabled analysis that was immediately useful, namely discovering problems at compile time rather than execution time. So type systems originally entered programming languages as a mechanism for making sure at compile time that the run-time values supplied for expression evaluation or procedure calls would be legitimate.
From page 73...
... Given the differences in appropriate base language size that arise from the different objectives, it is small wonder that different criteria are appropriate, or that observers applying such different criteria reach different conclusions about different research results. 6This is true across a wide range of problem domains; studies have demonstrated it for medical diagnosis, physics, chess, financial analysis, architecture, scientific research, policy decision making, and others (Raj Reddy, 1988, "Foundations and Grand Challenges of Artificial Intelligence," AI Magazine, Winter; Herbert A
From page 74...
... As an example of how programming languages bridge the gap between programmers and computers, consider numerical computation, one of the earliest applications of computers, dating back to World War II. A common mathematical operation is to multiply two vectors of numbers.
From page 75...
... Programmers can occasionally produce small and ingenious pieces of machine code that run much faster than the machine instructions generated by a compiler. However, as a program grows to thousands of lines or more, a compiler's systematic, analytical approach usually results in higherquality translations that not only execute far more effectively but also contain fewer errors.
From page 76...
... In this world, many programming problems and errors arise from misunderstandings of intent, misinformation, and human shortcomings, so language designers have come to recognize that programming languages convey information among human programmers, as well as to computers. Language designers soon realized that programming languages must be extensible as well as computationally universal, as no one language could provide operations appropriate for all types of problems.
From page 77...
... Incorporation of new constructs to aid in the development of more robust software systems has been a continuing major trend in programming-language development. In addition to well-structured features for controlling programs such as the "while loop," other improvements include features that permit dividing up software into modules, strong type checking to catch some errors at compile time rather than run time, and incorpora
From page 78...
... Programminglanguage researchers are devoting increasing attention to producing programs with far fewer defects and systems with much higher levels of fault tolerance. They are also developing software verification tools of greater power and rigor that can be used throughout the software development process.


This material may be derived from roughly machine-read images, and so is provided only to facilitate research.
More information on Chapter Skim is available.