Abstract
Abstraction is a fundamental tool of human thought in every context. This essay briefly reviews some manifestations of abstraction in everyday life, in engineering and mathematics, and in software and system development. Vertical and horizontal abstraction are distinguished and characterised. The use of vertical abstraction in top-down and bottom-up program development is discussed, and also, the use of horizontal abstraction in one very different approach to program design. The ubiquitous use of analogical models in software is explained in terms of analytical abstractions. Some aspects of the practical use of abstraction in the development of computer-based systems are explored. The necessity of multiple abstractions is argued from the essential nature of abstraction, which by definition focuses on some concerns at the expense of discarding others. Finally, some general recommendations are offered for a consciously thoughtful use of abstraction in software development.
Similar content being viewed by others
References
Abrial, J.-R.: Modeling in Event-B: System and Software Engineering. Cambridge University Press, Cambridge (2010)
Ackoff, R.L.: Scientific Method: Optimizing Applied Research Decisions. Wiley, London (1962)
Atkinson, C., Kuehne, T.: Reducing accidental complexity in domain models. Softw. Syst. Model. 7(3), 345–360 (2008)
Dahl, O.-J., Hoare, C.A.R.: Hierarchical Program Structures. In: Dahl, O.J., Dijkstra, E.W., Hoare, C.A.R. (eds.) Structured Programming. Academic Press, London (1972)
Dijkstra, E.W.: A case against the GO TO statement: EWD215. Commun. ACM. 11(3), 147–148 (1968). published as a letter to the Editor
Dijkstra, E.W.: The structure of the ‘THE’ multiprogramming system: EWD196. Commun. ACM. 11(5), 341–346 (1968)
Dijkstra, E.W.: The Humble Programmer. Turing Award Lecture. Commun. ACM. 15(10), 859–866 (1972)
Dijkstra, E.W.: A Discipline of Programming. Prentice-Hall, USA (1976)
Dijkstra, E.W.: On the cruelty of really teaching computer science. Commun. ACM. 32(12), 1398–1414 (1989). With responses from David Parnas, W L Scherlis, M H van Emden, Jacques Cohen, R W Hamming, Richard M Karp and Terry Winograd, and a reply from Dijkstra
Evans-Pritchard, E.E.: Witchcraft, Oracles and Magic among the Azande. The Clarendon Press, Oxford (1937). (Abridged with an introduction by Eva Gillies. The Clarendon Press, Oxford (1976))
Feynman, R.P.: Personal observations on the reliability of the Shuttle; Appendix F to the Rogers Commission Report, (1986); available at http://science.ksc.nasa.gov/shuttle/missions/51-l/docs/rogers-commission/Appendix-F.txt, accessed 19th (May 2012)
Goguen, J.A., Burstall, R.M.: Cat, a System for the Structured Elaboration of Correct Programs from Structured Specifications: Technical Report CSL-118. Computer Science Laboratory, SRI International, USA (1980)
Gregory, R.L.: The medawar lecture 2001 lnowledge for vision: vision for knowledge. Philos. Trans. Royal Soc. B. 360, 1231–1251 (2005)
Hardy, G.H.: A Mathematician’s Apology. Cambridge University Press, Cambridge (1940)
http://matdl.org/failurecases/Building_Collapse-Cases/Hartford_Civic_Center, accessed 3 October 2011
Jackson, D.: Software Abstractions: Logic, Language and Analysis. MIT Press, USA (2006)
Jackson, M.A.: Principles of Program Design. Academic Press, London (1975)
Jackson, M.A.: Constructive methods of program design. In: Goos, G., Hartmanis, J. (eds.) Proceedings of the 1st Conference of the European Cooperation in Informatics, p. 262. Springer, Berlin (1976)
Jackson, M.: Some Basic Tenets of Description. Softw. Syst. J. 1(1), 5–9 (2002)
Jones, C.: Systematic Software Development Using VDM, 2nd Edition. Prentice-Hall International, USA (1990)
Jeff, K.: Is abstraction the key to computing? Commun. ACM. 50(4), 37–42 (2007)
Kruchten, P.: The Rational Unified Process: An Introduction. Addison-Wesley Longman, Reading (1999)
Lakatos, I.: Proofs and refutations. In: Worrall, J., Zahar, E. (eds.) The Logic of Mathematical. Cambridge University Press, Cambridge (1976)
Parnas, D.L.: On the criteria to be used in decomposing systems into modules. Commun. ACM. 15(12), 1053–1058 (1972)
Poincaré, H.: Science et Méthode. Flammarion, France (1908) (translated by Francis Maitland, Nelson 1914, Dover, 2003)
Billson, C.: A History of the London Tube Maps. http://homepage.ntlworld.com/clivebillson/tube/tube.html. accessed 30 May 2011
Turing, A.M.: Checking a large routine. In: Report on a Conference on High Speed Automatic Calculating Machines, pp. 67–69, Cambridge University Mathematical Laboratory, Cambridge, (1949). (Turing’s paper is discussed in Cliff B. Jones; The Early Search for Tractable Ways of Reasoning about Programs. IEEE Annals of the History of Computing 25(2), 26–49, 2003)
Vincenti, W.G.: What Engineers Know and How They Know It: Analytical Studies from Aeronautical History. The Johns Hopkins University Press, Baltimore (1993)
Hermann, W.: David Hilbert and his mathematical work. Bull. Am. Math. Soc. 50, 612–654 (1944)
Woodcock, J., Davies, J.: Using Z: Specification, Refinement, and Proof. Prentice-Hall International, USA (1996)
Zave, P.: Calls considered harmful and other selected papers on services and visualization. In: Tiziana, M., Bernhard, S., Roland, R., Joachim, P. (eds.) Towards User-Friendly Design, LNCS 1385, p. 27. Springer, Berlin (1998)
Acknowledgments
I am grateful to Daniel Jackson for illuminating discussions. I also thank the anonymous reviewers, whose careful and extensive comments and suggestions have encouraged and helped me to improve this essay.
Author information
Authors and Affiliations
Corresponding author
Additional information
Communicated by Prof. Jon Whittle and Gregor Engels.
Rights and permissions
About this article
Cite this article
Jackson, M. Aspects of abstraction in software development. Softw Syst Model 11, 495–511 (2012). https://doi.org/10.1007/s10270-012-0259-7
Received:
Revised:
Accepted:
Published:
Issue Date:
DOI: https://doi.org/10.1007/s10270-012-0259-7