Unformatted text preview:

Multiple Inheritance & FactoriesTopics CoveredProblemCourse InterfaceLogged Course InterfaceCourse abstract classALoggedCourse abstract classRegular Course InterfaceLogged Regular Course InterfaceSlide 10DuplicationSlide 12Single Interface InheritanceAlternative Single InheritanceMultiple Interface InheritanceSlide 16Old Regular Course ClassNew Regular Course ClassSingle Class InheritanceMultiple Class Inheritance?Slide 21Multiple inheritance rulesSlide 23Slide 24Slide 25Single inheritance => reduced polymorphsism?Single inheritance => reduced polymorphism?Implementing Single InterfaceImplementing Multiple InterfacesMultiple interfaces => CastingSingle interfaceSingle interface and overloadingImplementing multiple interfaces vs. Single InterfaceSwitching between different course configurationsACourseListMain ClassCode DuplicationCode InconsistencySwitching between classesFactory classCommon Factory InterfaceACourseFactoryALoggedCourseFactoryOriginal Main ClassNew Main ClassNew Main Class for logged coursesFactory Transparent Main?Factory Selector InterfaceFactory Selector ClassMain Class with Factory SelectorDifferent SelectionSlide 52Logged Factory InterfaceSlide 54Factory PatternAlternative Factory PatternClasses vs. FactoryFactory UsesFactory usesSlide 60Factories and InterfacesObjectEditor Factory ExampleObjectEditor Factory Selector ExampleMain class without FaçadeMain Class without FaçadeMain class with façadeFaçade interfaceFaçade ClassSlide 69Facade patternSlide 71Factory-based Façade ClassApplication-specific factoryFactory MethodAbstract facade classConcrete course userLogged course userFactory Methods in Course ExampleFactory Method PatternSlide 80Slide 81Alternative Factory Method UsageFactory methodsFactory Classes vs. Factory MethodsFactory Classes vs. MethodsElectronics ExampleMultiple Inheritance & FactoriesPrasun DewanComp 114Topics Covered•Multiple inheritance–Extending more than one type•Factories–Class creating objects•More on facades–Compose objects •Can be used independently–We use them together here•Factory methods–Abstract method instead of classProblem•A modification to the course problem.•Want to gather statistics on how many times a user requested a course–How many times matchTitle() successfully matched a courseCourse Interfacepackage courseTree;public interface Course extends TreeNode {public String getTitle();public String getDepartment();public int getNumber();public void init (String theTitle, String theDept); }Logged Course Interfacepackage courseTree;public interface LoggedCourse extends Course {public int getNumberOfQueries();}Course abstract classpackage courseTree;public abstract class ACourse implements Course {String title, dept;public ACourse (String theTitle, String theDept) {init (theTitle, theDept);}public ACourse () {}public void init (String theTitle, String theDept) {title = theTitle;dept = theDept;}public String getTitle() {return title;}public String getDepartment() {return dept;}public Course matchTitle(String theTitle) {if ( title.equals(theTitle)) return this;else return null;}}ALoggedCourse abstract classpackage courseTree;public abstract class ALoggedCourse extends ACourse implements LoggedCourse {int numberOfQueries = 0;public ALoggedCourse (String theTitle, String theDept) {super (theTitle, theDept);}public ALoggedCourse () {}public int getNumberOfQueries() {return numberOfQueries;}public Course matchTitle(String theTitle) {Course course = super.matchTitle(theTitle);if (course != null) numberOfQueries++;return course;}}Regular Course Interfacepackage courseTree;public interface RegularCourse extends Course {public void init (String theTitle, String theDept, int theCourseNum);}Logged Regular Course Interfacepackage courseTree;public interface LoggedRegularCourse extends ??? {…}Logged Regular Course Interfacepackage courseTree;public interface LoggedRegularCourse extends LoggedCourse {public void init (String theTitle, String theDept, int theCourseNum);}package courseTree;public interface LoggedRegularCourse extends RegularCourse {public int getNumberOfQueries();}Duplicationpackage courseTree;public interface LoggedRegularCourse extends LoggedCourse {public void init (String theTitle, String theDept, int theCourseNum);}package courseTree;public interface RegularCourse extends Course {public void init (String theTitle, String theDept, int theCourseNum);}package courseTree;public interface LoggedRegularCourse extends RegularCourse {public int getNumberOfQueries();}Duplicationpackage courseTree;public interface LoggedCourse extends Course {public int getNumberOfQueries();}Single Interface Inheritancepackage courseTree;public interface LoggedRegularCourse extends LoggedCourse { public void init (String theTitle, String theDept, int theCourseNum);}public interface RegularCourse extends Course { public void init (String theTitle, String theDept, int theCourseNum);}public interface Course extends TreeNode { public String getTitle(); public String getDepartment(); public int getNumber(); public void init (String theTitle, String theDept);}public interface LoggedCourse extends Course { public int getNumberOfQueries();}CourseLoggedCourseRegularCourseLoggedRegularCourseAlternative Single Inheritancepackage courseTree;public interface LoggedRegularCourse extends RegularCourse { public int getNumberOfQueries();}public interface RegularCourse extends Course { public void init (String theTitle, String theDept, int theCourseNum);}public interface Course extends TreeNode { public String getTitle(); public String getDepartment(); public int getNumber(); public void init (String theTitle, String theDept);}public interface LoggedCourse extends Course { public int getNumberOfQueries();}CourseLoggedCourseRegularCourseLoggedRegularCourseMultiple Interface Inheritancepackage courseTree;public interface LoggedRegularCourse extends LoggedCourse, RegularCourse{}package courseTree;public interface RegularCourse extends Course {public void init (String theTitle, String theDept, int theCourseNum);}package courseTree;public interface LoggedCourse extends Course {public int getNumberOfQueries();}empty interfaceMultiple Interface Inheritancepublic interface LoggedRegularCourse extends RegularCourse {}public interface RegularCourse extends Course { public void init (String theTitle, String theDept, int theCourseNum);}public interface Course extends TreeNode { public String getTitle(); public String


View Full Document

UNC-Chapel Hill COMP 114 - Multiple Inheritance & Factories

Download Multiple Inheritance & Factories
Our administrator received your request to download this document. We will send you the file to your email shortly.
Loading Unlocking...
Login

Join to view Multiple Inheritance & Factories and access 3M+ class-specific study document.

or
We will never post anything without your permission.
Don't have an account?
Sign Up

Join to view Multiple Inheritance & Factories 2 2 and access 3M+ class-specific study document.

or

By creating an account you agree to our Privacy Policy and Terms Of Use

Already a member?