Designing a Flexible Framework for a Table Abstraction

  • H. Conrad Cunningham
  • Yi Liu
  • Jingyi Wang
Part of the International Series in Operations Research & Management Science book series (ISOR, volume 132)


In a provocative essay from the mid-1980s, Brooks asserts that “building software will always be hard” because software systems are inherently complex, must conform to all sorts of physical, human, and software interfaces, must change as the system requirements evolve, and are inherently invisible entities (Brooks 1986). A decade later Brooks again observes, “The best way to attack the essence of building software is not to build it at all” (Brooks 1995). That is, software engineers should reuse both software and, more importantly, software designs.


Design Pattern Framework Design Design Contract Abstract Data Type Storage Layer 
These keywords were added by machine and not by the authors. This process is experimental and the keywords may be updated as the learning algorithm improves.



The preparation of an earlier version of this chapter was supported, in part, by a grant from Acxiom Corporation titled “An Acxiom Laboratory for Software Architecture and Component Engineering (ALSACE).” The authors thank Robert Cook and “Jennifer” Jie Xu for their suggestions for improvements to the paper (Cunningham and Wang 2001). We also thank the two anonymous reviewers, the editors, Chuck Jenkins, and Pallavi Tadepalli for their useful comments on this chapter. As this chapter was being revised, the first author benefited from discussions about various aspects of the framework design with Jenkins. Pallavi Tadepalli is a collaborator on the related function generalization research (Cunningham and Tadepalli 2006; Cunningham et al. 2006b) and Cuihua Zhang is involved with work on the educational aspects of software patterns and framework design (Cunningham et al. 2004, 2006a). This research also benefited from insights provided by projects completed by the first author’s former students Wei Feng on relative files, Jian Hu on Table libraries, and Deep Sharma on B-tree libraries.


  1. Britton KH, Parker RA, Parnas DL (1981) A procedure for designing abstract interfaces for device interface modules, In: Proceedings of the 5th International Conference on Software Engineering, pp 95-204.Google Scholar
  2. Brooks FP Jr (1986) No silver bullet—Essence and accidents in software engineering, In: Information Processing, Elsevier Science, pp 1069-1076.Google Scholar
  3. Brooks FP Jr (1995) “No Silver Bullet” refired,  Chapter 17, In: The mythical man-month, Anniversary edn, Addison-Wesley.
  4. Buschmann F, Meunier R, Rohnert H, Sommerlad P, Stal M (1996) Pattern-oriented software architecture: A system of patterns, Wiley.Google Scholar
  5. Coplien J, Hoffman D, Weiss D (1998) Commonality and variability in software engineering, IEEE Software, vol 15, no 6, pp 37-45.CrossRefGoogle Scholar
  6. Cunningham HC, Wang J (2001) Building a layered framework for the table abstraction, In: Proceedings of the ACM Symposium on Applied Computing, pp 668-674.Google Scholar
  7. Cunningham HC, Tadepalli P (2006) Using function generalization to design a cosequential processing framework, In: Proceedings of the 39th Hawaii International Conference on System Sciences, IEEE, 10 pages.Google Scholar
  8. Cunningham HC, Zhang C, Liu Y (2004) Keeping secrets within a family: Rediscovering Parnas. In: Proceedings of the International Conference on Software Engineering Research and Practice (SERP), CSREA Press, pp 712-718.Google Scholar
  9. Cunningham HC, Liu Y, Zhang C (2006a) Using classic problems to teach Java framework design. Science of Computer Programming, vol 59, pp 147-169.MathSciNetMATHCrossRefGoogle Scholar
  10. Cunningham HC, Liu Y, Tadepalli P (2006b) Framework design using function generalization: A binary tree traversal case study. In: Proceedings of the ACM SouthEast Conference, pp 312-318.Google Scholar
  11. Fayad ME, Schmidt DC, Johnson RE (1999) Application frameworks, In: Fayad ME, Schmidt DC, Johnson RE (eds) Building application frameworks: Object-oriented foundations of framework design, Wiley, pp 3-27.Google Scholar
  12. Folk MJ, Zoellick B, Riccardi G (1998) File structures: An object-oriented approach with C++, Addison Wesley.Google Scholar
  13. Gamma R, Helm R, Johnson R, Vlissides J (1995) Design patterns: Elements of reusable object-oriented software, Addison Wesley.Google Scholar
  14. Goodrich MT, Tomassia R (1998) Data structures and algorithms in Java, Wiley.Google Scholar
  15. Grand M (1998) Patterns in Java, vol 1, Wiley.Google Scholar
  16. Guttag JV (1977) Abstract data types and the development of data structures, Communications of the ACM, vol 20, no 6, pp 396-404.MATHCrossRefGoogle Scholar
  17. Hallstrom J, Soundarajan N (2002) Incremental development using object-oriented frameworks: A case study, Journal of Object Technology, Special issue TOOLS USA 2002, vol 1, no 3, pp 189-205.Google Scholar
  18. Hoare CAR (1969) An axiomatic basis for computer programming, Communications of the ACM, vol 12, no 10, pp 45-58.CrossRefGoogle Scholar
  19. Hoare CAR (1972) Proofs of correctness of data representations, Acta Informatica, vol 1, pp 271-281.MATHCrossRefGoogle Scholar
  20. Johnson RE, Foote B (1988) Designing reusable classes, Journal of Object-Oriented Programming, vol 1, no 2, pp 22-35.Google Scholar
  21. Liskov B, Wing J (1994) A behavioral notion of subtyping, ACM Transactions on Programming Languages and Systems, vol 16, pp 1811-1840.CrossRefGoogle Scholar
  22. Mitchell B, McKim J (2002) Design by contract, by example. Addison-Wesley.Google Scholar
  23. Meyer B (1992) Applying design by contract. IEEE Computer, pp 40- 51.Google Scholar
  24. Meyer B (1997) Object-oriented software construction, second edn, Prentice Hall PTR.Google Scholar
  25. Odersky M, Altherr P, Cremet V, Dragos I, Dubochet G. Emir B, McDirmid S, Micheloud S, Mihaylov N, Schinz M,. Stenman E, Spoon L, Zenger M (2006) An overview of the Scala programming language, second edn, LAMP-REPORT-2006-001, Ecole Polytechnique Federale De Lausanne (EPFL), 20 pages.Google Scholar
  26. Parnas DL (1972) On the criteria to be used in decomposing systems into modules, Communications of the ACM, vol 15, no 12, pp 1053-1058.CrossRefGoogle Scholar
  27. Parnas DL (1976) On the design and development of program families, IEEE Transaction on Software Engineering, vol SE-2, pp 1-9.CrossRefGoogle Scholar
  28. Parnas DL (1978) Some software engineering principles. Infotech State of the Art Report on Structured Analysis and Design, Infotech International, 10 pages, 1978. Reprinted in: Hoffman DM, Weiss DM (eds) (2000) Software fundamentals: Collected papers by David L. Parnas, Addison-Wesley.Google Scholar
  29. Peyton Jones S (2003) Haskell 98 language and libraries: The revised report, Cambridge University Press.Google Scholar
  30. Pree W (1995) Design patterns for object-oriented software development, Addison-Wesley.Google Scholar
  31. Roberts D, Johnson R (1998) Patterns for evolving frameworks, In: Martin R, Riehle D, Buschmann F (eds) Pattern languages of program design 3, Addison-Wesley, pp.471-486.Google Scholar
  32. Schmid HA (1996) Creating applications from components: A manufacturing framework, IEEE Software, vol 13, no 6, pp 67-75.CrossRefGoogle Scholar
  33. Schmid HA (1999) Framework design by systematic generalization, In: Fayad ME, Schmidt DC, Johnson RE (eds) Building application frameworks: Object-oriented foundations of framework design, Wiley, pp 353–378.Google Scholar
  34. Soundarajan N, Fridella S (2000) Framework-based applications: from incremental development to incremental reasoning, In: Proceedings of the 6th Interantional Confernce on Software Reuse (ICSR), LNCS 1844, Springer-Verlag, pp 100-116.Google Scholar
  35. Shaw M (1996) Some patterns for software architecture, In: Vlissides JM, Coplien JO, Kerth NL (eds), Pattern languages of program design 2, Addison Wesley.Google Scholar
  36. Sridhar MA (1996) Building portable C++ applications with YACL, Addison-Wesley.Google Scholar
  37. Thomas D, Fowler C, Hunt A (2005) Programming Ruby: The pragmatic programmer’s guide, second edition, The Pragmatic Bookshelf.Google Scholar
  38. Wang J (2000) A flexible Java library for table data and file structures, Technical Report UMCIS-2000-07, Department of Computer and Information Science, University of Mississippi.Google Scholar
  39. Weiss DM, Lai CTR (1999) Software product-line engineering: A family-based software development process, Addison-Wesley.Google Scholar
  40. Woolf B (1998) Null object. In: Martin R, Riehle D, Buschmann F (eds), Pattern languages of program design 3, Addison-Wesley, pp. 5-18.Google Scholar

Copyright information

© Springer Science+Business Media, LLC 2009

Authors and Affiliations

  • H. Conrad Cunningham
    • 1
  • Yi Liu
    • 2
  • Jingyi Wang
    • 3
  1. 1.Department of Computer and Information ScienceUniversity of MississippiOxfordUSA
  2. 2.Department of Electrical Engineering and Computer ScienceSouth Dakota State UniversityBrookingsUSA
  3. 3.Acxiom CorporationLittle RockUSA

Personalised recommendations