\contentsline {chapter}{List of Tables}{vii} \contentsline {chapter}{List of Figures}{ix} \contentsline {chapter}{Abstract}{xii} \contentsline {chapter}{Acknowledgments}{xiv} \contentsline {chapter}{\numberline {1}Introduction}{1} \contentsline {section}{\numberline {1.1}Background}{1} \contentsline {section}{\numberline {1.2}Aims}{3} \contentsline {section}{\numberline {1.3}Significance}{4} \contentsline {section}{\numberline {1.4}Project Overview}{6} \contentsline {subsection}{\numberline {1.4.1}Investigation}{6} \contentsline {subsection}{\numberline {1.4.2}Development}{7} \contentsline {section}{\numberline {1.5}Thesis Structure}{8} \contentsline {chapter}{\numberline {2}Dependence Representations and Analysis: A Review}{10} \contentsline {section}{\numberline {2.1}Introduction}{10} \contentsline {section}{\numberline {2.2}The BON Method}{11} \contentsline {subsection}{\numberline {2.2.1}Overview of the BON Method}{11} \contentsline {subsection}{\numberline {2.2.2}BON Modeling Charts}{12} \contentsline {subsubsection}{System Chart}{13} \contentsline {subsubsection}{Cluster Chart}{14} \contentsline {subsubsection}{Class Chart}{15} \contentsline {subsection}{\numberline {2.2.3}Typed Class Interfaces}{15} \contentsline {subsubsection}{Class Interfaces}{15} \contentsline {subsubsection}{Class Clustering}{18} \contentsline {subsection}{\numberline {2.2.4}Static Relations}{19} \contentsline {subsubsection}{Inheritance Relations}{20} \contentsline {subsubsection}{Client Relations}{22} \contentsline {subsection}{\numberline {2.2.5}Discussion}{25} \contentsline {section}{\numberline {2.3}Unified Method}{26} \contentsline {subsection}{\numberline {2.3.1}Overview of the Unified Method}{26} \contentsline {subsection}{\numberline {2.3.2}Class Diagram}{28} \contentsline {subsubsection}{Classes}{28} \contentsline {subsubsection}{Templates}{29} \contentsline {subsubsection}{Associations}{30} \contentsline {subsubsection}{Inheritance}{31} \contentsline {subsubsection}{Categories}{33} \contentsline {subsection}{\numberline {2.3.3}Discussion}{33} \contentsline {section}{\numberline {2.4}Formal Methods Applied to Reuse}{35} \contentsline {subsection}{\numberline {2.4.1}Lower-Level Hierarchy}{35} \contentsline {subsection}{\numberline {2.4.2}Higher-Level Hierarchy}{36} \contentsline {subsection}{\numberline {2.4.3}Search for Reusable Candidates}{38} \contentsline {subsection}{\numberline {2.4.4}Graphical Browser}{38} \contentsline {subsection}{\numberline {2.4.5}Discussion}{38} \contentsline {section}{\numberline {2.5}Hierarchical Dependence Diagram (HDD)}{39} \contentsline {subsection}{\numberline {2.5.1}Overview of HDD}{39} \contentsline {subsection}{\numberline {2.5.2}Four Levels of HDD}{40} \contentsline {subsubsection}{The Class Level (level 3)}{41} \contentsline {subsubsection}{The Cluster Level (Level 2)}{42} \contentsline {subsubsection}{The Library Level (Level 1)}{44} \contentsline {subsubsection}{The Platform Level (Level 0)}{44} \contentsline {subsection}{\numberline {2.5.3}The HDD Maintenance Algorithms}{45} \contentsline {subsubsection}{Add A New Class}{46} \contentsline {subsubsection}{Modify A Class}{47} \contentsline {subsubsection}{Delete A Class}{48} \contentsline {subsection}{\numberline {2.5.4}Design Guidelines of the HDD}{49} \contentsline {subsubsection}{Reusable Components}{50} \contentsline {subsubsection}{Hierarchical Independence Design Guidelines}{51} \contentsline {subsection}{\numberline {2.5.5}Discussion}{52} \contentsline {section}{\numberline {2.6}Other Related Works}{54} \contentsline {section}{\numberline {2.7}Conclusion and Discussion}{55} \contentsline {chapter}{\numberline {3}A Two-level Framework for Hierarchical Dependence Analysis}{57} \contentsline {section}{\numberline {3.1}Generic Dependence Level}{58} \contentsline {subsection}{\numberline {3.1.1}Client Dependency}{59} \contentsline {subsubsection}{InstanceOf Dependency}{59} \contentsline {subsubsection}{InstanceOf Dependency}{59} \contentsline {subsubsection}{PartOf Dependency}{60} \contentsline {subsubsection}{Returned Class Dependency}{60} \contentsline {subsubsection}{ParameterOf Dependency}{61} \contentsline {subsubsection}{Generic Class Dependency}{62} \contentsline {subsection}{\numberline {3.1.2}Inheritance Dependence}{63} \contentsline {subsubsection}{Single Inheritance}{63} \contentsline {subsubsection}{Multiple Inheritance}{64} \contentsline {subsection}{\numberline {3.1.3}Impact of the Different Dependencies}{64} \contentsline {subsubsection}{Client Dependence vs Inheritance Dependence}{65} \contentsline {subsubsection}{Comparison of Client Dependencies}{65} \contentsline {subsubsection}{Single Inheritance Dependence vs Multiple Inheritance Dependence}{66} \contentsline {subsubsection}{Overall}{66} \contentsline {section}{\numberline {3.2}Specific Dependence Level}{66} \contentsline {subsection}{\numberline {3.2.1}Selective Inheritance in C++}{67} \contentsline {subsection}{\numberline {3.2.2}Friend Relation in C++}{67} \contentsline {subsection}{\numberline {3.2.3}Expanded Client Relation in Eiffel}{69} \contentsline {chapter}{\numberline {4}Enhancement of the Hierarchical Dependence Diagram}{71} \contentsline {section}{\numberline {4.1}Some Small Fixes to the Current HDD}{72} \contentsline {section}{\numberline {4.2}Simple Version of HDD}{73} \contentsline {section}{\numberline {4.3}Expanded Version of HDD}{74} \contentsline {subsection}{\numberline {4.3.1}Graphical Representation of the InstanceOf Dependency}{74} \contentsline {subsection}{\numberline {4.3.2}Graphical Representation of the PartOf Dependency}{75} \contentsline {subsection}{\numberline {4.3.3}Graphical Representation of the Generic Class Dependency}{75} \contentsline {subsection}{\numberline {4.3.4}Graphical Representation of the Returned Class Dependency}{76} \contentsline {subsection}{\numberline {4.3.5}Graphical Representation of the ParameterOf Dependency}{77} \contentsline {subsection}{\numberline {4.3.6}Graphical Representation of the Single Inheritance Dependency}{77} \contentsline {subsection}{\numberline {4.3.7}Graphical Representation of the Multiple Inheritance Dependency}{78} \contentsline {chapter}{\numberline {5}Environments and Tools for Hierarchical Dependence Analysis}{80} \contentsline {section}{\numberline {5.1}The Environments}{81} \contentsline {section}{\numberline {5.2}A Prototyping Tool for Hierarchical Dependence Analysis}{82} \contentsline {subsection}{\numberline {5.2.1}Parser}{83} \contentsline {subsubsection}{Scope and Assumptions}{83} \contentsline {subsubsection}{Parser Output Data Structures}{84} \contentsline {subsubsection}{Parsing Algorithm}{88} \contentsline {subsection}{\numberline {5.2.2}HDD Maintainer}{93} \contentsline {subsubsection}{Scope}{93} \contentsline {subsubsection}{Maintain's Output Data Structure}{93} \contentsline {subsection}{\numberline {5.2.3}Text Based HDD Drawer}{97} \contentsline {subsubsection}{Concrete Syntax of Text Based HDD}{97} \contentsline {subsubsection}{Sample Text Based HDD}{99} \contentsline {chapter}{\numberline {6}Conclusion and Future Work}{102} \contentsline {section}{\numberline {6.1}Conclusion}{102} \contentsline {section}{\numberline {6.2}Future Work}{103} \contentsline {chapter}{Appendix\ A\ A Case Study: ISE Eiffel's Base Library}{104} \contentsline {section}{\numberline {A.1}Logical Hierarchical Structure}{105} \contentsline {section}{\numberline {A.2}Text Based HDD}{107} \contentsline {subsubsection}{Platform Level HDD}{108} \contentsline {subsubsection}{Library Level HDD}{108} \contentsline {subsubsection}{Cluster Level HDD}{109} \contentsline {subsubsection}{Class Level HDD}{114} \contentsline {chapter}{Appendix\ B\ Source Code Listings}{145} \contentsline {section}{\numberline {B.1}The Parser}{145} \contentsline {subsubsection}{parser.h}{145} \contentsline {subsubsection}{parser.c}{146} \contentsline {subsubsection}{class.h}{155} \contentsline {subsubsection}{class.c}{155} \contentsline {subsubsection}{classrel.h}{158} \contentsline {subsubsection}{classrel.c}{159} \contentsline {subsubsection}{cluster.h}{162} \contentsline {subsubsection}{cluster.c}{163} \contentsline {subsubsection}{library.h}{166} \contentsline {subsubsection}{library.c}{167} \contentsline {subsubsection}{platform.h}{169} \contentsline {subsubsection}{platform.c}{170} \contentsline {subsubsection}{macro.h}{173} \contentsline {section}{\numberline {B.2}The Maintainer}{173} \contentsline {subsubsection}{maintain.c}{173} \contentsline {subsubsection}{hddtext.h}{180} \contentsline {subsubsection}{hddtext.c}{181} \contentsline {subsubsection}{mtcla.h}{183} \contentsline {subsubsection}{mtcla.c}{184} \contentsline {subsubsection}{mtclarel.h}{189} \contentsline {subsubsection}{mtclarel.c}{190} \contentsline {subsubsection}{mtclu.h}{194} \contentsline {subsubsection}{mtclu.c}{195} \contentsline {subsubsection}{mtclurel.h}{200} \contentsline {subsubsection}{mtclurel.c}{201} \contentsline {subsubsection}{mtlib.h}{206} \contentsline {subsubsection}{mtlib.c}{206} \contentsline {subsubsection}{mtlibrel.h}{211} \contentsline {subsubsection}{mtlibrel.c}{212} \contentsline {subsubsection}{mtplat.h}{217} \contentsline {subsubsection}{mtplat.c}{218} \contentsline {subsubsection}{mtplarel.h}{221} \contentsline {subsubsection}{mtplarel.c}{222}