Skip to main content
Log in

Aspects of abstraction in software development

  • Expert’s Voice
  • Published:
Software & Systems Modeling Aims and scope Submit manuscript

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.

This is a preview of subscription content, log in via an institution to check access.

Access this article

Price excludes VAT (USA)
Tax calculation will be finalised during checkout.

Instant access to the full article PDF.

Fig. 1

Similar content being viewed by others

References

  1. Abrial, J.-R.: Modeling in Event-B: System and Software Engineering. Cambridge University Press, Cambridge (2010)

    MATH  Google Scholar 

  2. Ackoff, R.L.: Scientific Method: Optimizing Applied Research Decisions. Wiley, London (1962)

    MATH  Google Scholar 

  3. Atkinson, C., Kuehne, T.: Reducing accidental complexity in domain models. Softw. Syst. Model. 7(3), 345–360 (2008)

    Article  Google Scholar 

  4. 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)

    Google Scholar 

  5. 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

    Article  MathSciNet  Google Scholar 

  6. Dijkstra, E.W.: The structure of the ‘THE’ multiprogramming system: EWD196. Commun. ACM. 11(5), 341–346 (1968)

    Article  MATH  Google Scholar 

  7. Dijkstra, E.W.: The Humble Programmer. Turing Award Lecture. Commun. ACM. 15(10), 859–866 (1972)

    Article  Google Scholar 

  8. Dijkstra, E.W.: A Discipline of Programming. Prentice-Hall, USA (1976)

    MATH  Google Scholar 

  9. 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

    Google Scholar 

  10. 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))

  11. 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)

  12. 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)

    Google Scholar 

  13. Gregory, R.L.: The medawar lecture 2001 lnowledge for vision: vision for knowledge. Philos. Trans. Royal Soc. B. 360, 1231–1251 (2005)

    Article  Google Scholar 

  14. Hardy, G.H.: A Mathematician’s Apology. Cambridge University Press, Cambridge (1940)

    Google Scholar 

  15. http://matdl.org/failurecases/Building_Collapse-Cases/Hartford_Civic_Center, accessed 3 October 2011

  16. Jackson, D.: Software Abstractions: Logic, Language and Analysis. MIT Press, USA (2006)

    Google Scholar 

  17. Jackson, M.A.: Principles of Program Design. Academic Press, London (1975)

    Google Scholar 

  18. 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)

    Google Scholar 

  19. Jackson, M.: Some Basic Tenets of Description. Softw. Syst. J. 1(1), 5–9 (2002)

    Article  Google Scholar 

  20. Jones, C.: Systematic Software Development Using VDM, 2nd Edition. Prentice-Hall International, USA (1990)

    Google Scholar 

  21. Jeff, K.: Is abstraction the key to computing? Commun. ACM. 50(4), 37–42 (2007)

    Google Scholar 

  22. Kruchten, P.: The Rational Unified Process: An Introduction. Addison-Wesley Longman, Reading (1999)

    Google Scholar 

  23. Lakatos, I.: Proofs and refutations. In: Worrall, J., Zahar, E. (eds.) The Logic of Mathematical. Cambridge University Press, Cambridge (1976)

    Google Scholar 

  24. Parnas, D.L.: On the criteria to be used in decomposing systems into modules. Commun. ACM. 15(12), 1053–1058 (1972)

    Google Scholar 

  25. Poincaré, H.: Science et Méthode. Flammarion, France (1908) (translated by Francis Maitland, Nelson 1914, Dover, 2003)

  26. Billson, C.: A History of the London Tube Maps. http://homepage.ntlworld.com/clivebillson/tube/tube.html. accessed 30 May 2011

  27. 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)

    Google Scholar 

  28. Vincenti, W.G.: What Engineers Know and How They Know It: Analytical Studies from Aeronautical History. The Johns Hopkins University Press, Baltimore (1993)

    Google Scholar 

  29. Hermann, W.: David Hilbert and his mathematical work. Bull. Am. Math. Soc. 50, 612–654 (1944)

    Article  MATH  Google Scholar 

  30. Woodcock, J., Davies, J.: Using Z: Specification, Refinement, and Proof. Prentice-Hall International, USA (1996)

    MATH  Google Scholar 

  31. 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)

    Google Scholar 

Download references

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

Authors

Corresponding author

Correspondence to Michael Jackson.

Additional information

Communicated by Prof. Jon Whittle and Gregor Engels.

Rights and permissions

Reprints 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

Download citation

  • Received:

  • Revised:

  • Accepted:

  • Published:

  • Issue Date:

  • DOI: https://doi.org/10.1007/s10270-012-0259-7

Keywords

Navigation