Abstract
Classes are fundamental elements in object-oriented programming, but they cannot be assembled in a truly flexible manner from other classes. As a result, cross-cutting structural code for implementing associations, graph structures, and so forth must be implemented over and over again. Subobject-oriented programming overcomes this problem by augmenting object-oriented programming with subobjects. Subobjects can be used as buildings blocks to configure and compose classes without suffering from name conflicts. This paper gives an overview of subobject-oriented programming and introduces mechanisms for subobject initialization, navigation of the subobject structure in super calls, and subobject refinement. Subobject-oriented programming has been implemented as a language extension to Java with Eclipse support and as a library in Python.
Access this chapter
Tax calculation will be finalised at checkout
Purchases are for personal use only
Preview
Unable to display preview. Download preview PDF.
References
Aracic, I., Gasiunas, V., Mezini, M., Ostermann, K.: An overview of caesarJ. In: Rashid, A., Akşit, M. (eds.) Transactions on AOSD I. LNCS, vol. 3880, pp. 135–173. Springer, Heidelberg (2006)
Bardou, D., Dony, C.: Split objects: A disciplined use of delegation within objects. In: Proceedings of OOPSLA 1996, pp. 122–137. ACM Press (1996)
Blake, E., Cook, S.: On including part hierarchies in object-oriented languages with an implementation in smalltalk. In: Bézivin, J., Hullot, J.-M., Lieberman, H., Cointe, P. (eds.) ECOOP 1987. LNCS, vol. 276, pp. 41–50. Springer, Heidelberg (1987)
Bracha, G., Cook, W.: Mixin-based inheritance. In: Proceedings of OOPSLA/ECOOP 1990, pp. 303–311 (1990)
Clarke, D., Drossopoulou, S., Noble, J., Wrigstad, T.: Tribe: A simple virtual class calculus. In: Proceedings of AOSD 2007, pp. 121–134 (2007)
Colnet, D., Marpons, G., Merizen, F.: Reconciling subtyping and code reuse in object-oriented languages: Using inherit and insert in SmartEiffel, the GNU Eiffel compiler. In: Morisio, M. (ed.) ICSR 2006. LNCS, vol. 4039, pp. 203–216. Springer, Heidelberg (2006)
Van Cutsem, T., Bergel, A., Ducasse, S., De Meuter, W.: Adding state and visibility control to traits using lexical nesting. In: Drossopoulou, S. (ed.) ECOOP 2009. LNCS, vol. 5653, pp. 220–243. Springer, Heidelberg (2009)
Ducasse, S., Wuyts, R., Bergel, A., Nierstrasz, O.: User-Changeable visibility: Resolving unanticipated name clashes in traits. In: OOPSLA, pp. 171–190 (2007)
Ernst, E.: Family polymorphism. In: Lindskov Knudsen, J. (ed.) ECOOP 2001. LNCS, vol. 2072, pp. 303–326. Springer, Heidelberg (2001)
Ernst, E.: Higher-order hierarchies. In: Cardelli, L. (ed.) ECOOP 2003. LNCS, vol. 2743, pp. 303–329. Springer, Heidelberg (2003)
Ernst, E., Ostermann, K., Cook, W.R.: A virtual class calculus. In: POPL, pp. 270–282 (2006)
Gosling, J., et al.: The Java Language Specification, 2nd edn. Addison-Wesley Longman Publishing Co. Inc. (2000)
Harrison, W.H., Ossher, H.: Subject-oriented programming (a critique of pure objects). In: Proceedings of OOPSLA 1993, pp. 411–428 (1993)
Kiczales, G., Hilsdale, E., Hugunin, J., Kersten, M., Palm, J., Griswold, W.G.: An overview of AspectJ. In: Lindskov Knudsen, J. (ed.) ECOOP 2001. LNCS, vol. 2072, pp. 327–354. Springer, Heidelberg (2001)
Kiczales, G., Lamping, J., Mendhekar, A., Maeda, C., Lopes, C., Loingtier, J.M., Irwin, J.: Aspect-Oriented programming. In: Akşit, M., Matsuoka, S. (eds.) ECOOP 1997 — Object-Oriented Programming. LNCS, vol. 1241, pp. 220–242. Springer, Heidelberg (1997)
Madsen, O.L., Møller-Pedersen, B.: Part objects and their location. In: Proceedings of TOOLS 1992, pp. 283–297 (1992)
Madsen, O.L., Møller-Pedersen, B., Nygaard, K.: Object-Oriented Programming in the Beta Programming Language. Addison-Wesley (1993)
Odersky, M., Zenger, M.: Scalable component abstractions. In: Proceedings of OOPSLA 2005, pp. 41–57 (2005)
Reppy, J., Turon, A.: Metaprogramming with traits. In: Ernst, E. (ed.) ECOOP 2007. LNCS, vol. 4609, pp. 373–398. Springer, Heidelberg (2007)
Rossum, G.V., Drake, F.: Python 3 Reference Manual. CreateSpace (2009)
Schärli, N., Ducasse, S., Nierstrasz, O., Black, A.: Traits: Composable units of behavior. In: Cardelli, L. (ed.) ECOOP 2003. LNCS, vol. 2743, pp. 248–274. Springer, Heidelberg (2003)
Stroustrup, B.: The C++ programming language, 2nd edn. Addison-Wesley Longman Publishing Co. Inc., Boston (1991)
Technical Group 4 of Technical Committee 39. ECMA-367 Standard: Eiffel Analysis, Design and Programming Language. ECMA International (2005)
van Dooren, M., Clarke, D.: Subobject transactional memory. In: Sirjani, M. (ed.) COORDINATION 2012. LNCS, vol. 7274, pp. 44–58. Springer, Heidelberg (2012)
van Dooren, M., Jacobs, B.: Implementations of subobject-oriented programming (2011), http://people.cs.kuleuven.be/marko.vandooren/subobjects.html
van Dooren, M., Steegmans, E.: A higher abstraction level using first-class inheritance relations. In: Ernst, E. (ed.) ECOOP 2007. LNCS, vol. 4609, pp. 425–449. Springer, Heidelberg (2007)
Author information
Authors and Affiliations
Editor information
Editors and Affiliations
Rights and permissions
Copyright information
© 2013 Springer-Verlag Berlin Heidelberg
About this chapter
Cite this chapter
van Dooren, M., Clarke, D., Jacobs, B. (2013). Subobject-Oriented Programming. In: Giachino, E., Hähnle, R., de Boer, F.S., Bonsangue, M.M. (eds) Formal Methods for Components and Objects. FMCO 2012. Lecture Notes in Computer Science, vol 7866. Springer, Berlin, Heidelberg. https://doi.org/10.1007/978-3-642-40615-7_2
Download citation
DOI: https://doi.org/10.1007/978-3-642-40615-7_2
Publisher Name: Springer, Berlin, Heidelberg
Print ISBN: 978-3-642-40614-0
Online ISBN: 978-3-642-40615-7
eBook Packages: Computer ScienceComputer Science (R0)