CS 435 - Week 12 Lecture 1 - 2014-04-15 a few points with regard to coupling: * major factors influencing coupling: * type of connection between modules * complexity of the interface * type of information flow between modules * here, type: for data, or for control * if you are transferring control information, the action of module DEPENDS on that information, * CAN make modules more difficult to understand * if you are transferring data information, module is more likely to be able to be treated as input/output function; lowest coupling: interfaces with only data communication highest coupling: hybrid interfaces; combination of some data items and some control items passed between modules, CAN be more confusing * note Chapter 6 also goes in more depth about some particular-to-OO-systems coupling considerations; * interaction coupling - methods of a class invoking methods of other classes * bad if methods change internal data of other methods -- better if methods JUST communicate via parameters! * better, too, if fewer simpler parameters than when more, more complex parameters * component coupling -when a class A has variables of another class C * weakest/loosest/most desirable when the variables of class C are either in method signatures or are attributes/data fields of class A (e.g., NOT buried as local variables within methods) * inheritance coupling - two classes are inheritance coupled if one is a subclass or descendant of the other * Cohesion - talking about WITHIN a module; why are the things within this module here? * high cohesion is good -- these things are in a module because they BELONG together! * see the levels of cohesion discussed in the chapter! * in OO systems in particular... method cohesion - why are these code elements within a particular method? class cohesion - why are these methods and data fields together in this class? inheritance cohesion - why are classes together in a hierarchy * 2 main reasons for subclassing/inheritance: * generalization/specialization <-- cohesion tends to be higher * code reuse ^ might have both! BUT sometimes one is tempted to subclass to share code that actually has a weak conceptual relationship; * open-closed principle * a module should be open for extension but closed for modification * Liskov's substitution principle - * IF inheritance hierarchies are built in a manner supporting the open-closed principle, they are said to satisfy this; Principle: If a program is using an object o1 of (base) class C, that program should remain UNCHANGED if o1 is replaced by an object o2 of a subclass of C UML !! * Unified Modeling Language * yes, it is a language! ...a *graphical* language; * it is a language for specifying, not a method or procedure; * there are MANY UML diagram types, to ALLOW for modeling at different levels of abstraction; UML 2.0 defines 13 types of diagrams; * one reference divides these into 3 categories: * structure * class diagram * object diagram * component * package * deployment * behavior * use case diagram * activity * state machine diagram * interaction * sequence diagram * communication * timing diagram * interaction overview