- Notifications
You must be signed in to change notification settings - Fork86
ZipCodeCore/Maven.LearnerLab
Folders and files
| Name | Name | Last commit message | Last commit date | |
|---|---|---|---|---|
Repository files navigation
- Objective - to implement a
ZipCodeWilmingtonclass whichmediates acompositeStudentsandInstructorssingleton reference. - Purpose - to demonstrate the use of
- Create a
Personclass.- The class should declare a
finalfield namedidof typelong. - The class should declare a field named
nameof typeString. Personconstructor should have a parameter of typelongandStringwhich sets theidandnamefield to the respective values.- The class should define a
getId()method which returns thePersonobject'sidfield. - The class should define a
getName()method which returns thePersonobject'snamefield. - The class should define a
setName()method which sets thePersonobject'snamefield.
- The class should declare a
- Create a
TestPersonclass.- Create a
testConstructormethod which ensures that aPersonobject'sidandnamefield are being set upon construction. - Create a
testSetNamemethod which ensures that aPersonobject'snamevariable is being set by invoking the.setNamemethod.
- Create a
- Create a
Learnerinterface.Learnershould declare method signature:- Method name:
learn - Method parameters:
double numberOfHours - Method return-type:
void
- Method name:
Learnershould declare method signature:- Method name:
getTotalStudyTime - Method return-type:
Double
- Method name:
- Create a
Studentclass such that:Studentis a subclass ofPersonStudentimplements theLearnerinterfaceStudentshould have an instance variabletotalStudyTimeof typedoubleStudentshould have a concrete implementation of thelearnmethod which increments thetotalStudyTimevariable by the specifiednumberOfHoursargument.Studentshould have agetTotalStudyTime()method which returns thetotalStudyTimeinstance variable.
- Create a
TestStudentclass.- Create a
testImplementationmethod that asserts that aStudentis aninstanceofaLearner. - Create a
testInheritancemethod that asserts that aStudentis aninstanceofaPerson. - Create a
testLearnmethod that ensures aStudent'stotalStudyTimeinstance variable is incremented by the specifiednumberOfHoursby invoking the.learnmethod.
- Create a
- Create a
Teacherinterface.Teachershould declare ateachmethod signature:- Method name:
teach - Method parameters:
Learner learnerdouble numberOfHours
- Method return-type:
void
- Method name:
Teachershould declare alecturemethod signature:- Method name:
lecture - Method parameters:
Learner[] learnersdouble numberOfHours
- Method return-type:
void
- Method name:
- Create an
Instructorclass such that:Instructoris a subclass ofPersonInstructorimplements theTeacherinterfaceInstructorshould have a concrete implementation of theteachmethod which invokes thelearnmethod on the specifiedLearnerobject.Instructorshould have a concrete implementation of thelecturemethod which invokes thelearnmethod on each of the elements in the specified array ofLearnerobjects.numberOfHoursshould be evenly split amongst the learners.double numberOfHoursPerLearner = numberOfHours / learners.length;
- Create a
TestInstructorclass.- Create a
testImplementationmethod that asserts that anInstructoris aninstanceofaTeacher. - Create a
testInheritancemethod that asserts that aInstructoris aninstanceofaPerson. - Create a
testTeachmethod that ensures when anInstructorinvokes theteachmethod, a respective student'stotalStudyTimeinstance variable is incremented by the specifiednumberOfHours. - Create a
testLecturemethod that ensures when anInstructorinvokes thelecturemethod, a respective array of students'totalStudyTimeinstance variables is incremented bynumberOfHours/students.length.
- Create a
- Create a
Peopleclass.- The class should instantiate a
Listfield ofPersonobjects namedpersonList. - The class should define a method named
addwhich adds aPersonto thepersonList. - The class should define a method named
findByIdwhich makes use of along idparameter to return aPersonobject with the respectiveidfield. - The class should define a named
containswhich makes use of aPerson personparameter to returntrueif thepersonListcontains the respectivePersonobject. - The class should define a method named
removewhich makes use of aPerson personparameter to remove a respectivePersonobject. - The class should define a method named
removewhich makes use of along idparameter to remove aPersonobject with the respectiveidfield. - The class should define a named
removeAllwhich clears ourpersonListfield. - The class should define a method named
countwhich returns the size ofpersonList. - The class should define a method named
toArraywhich returns an array representation of thepersonListfield. - The class should implement
Iterable<E>and define a method namediteratorwhich makes use of thepersonListfield to generate a new aIterator<E>.
- The class should instantiate a
- Create a
TestPeopleclass.- Create a
testAddmethod which ensures that ourpersonListin ourPeopleclass populated with respectivePersonobjects following invokation of theaddmethod. - Create a
testRemovemethod which ensures that thepersonListin aPeopleobject isdepopulated with a respectivePersonobject following the invokation of theremovemethod. - Create a
testFindByIdmethod which ensures that a respectivePersonobject with a respectiveidfield is returned upon invokation of thefindByIdmethod on a respectivePeopleobject.
- Create a
- Note: The creation of this class will demonstrate an implementation ofsingleton design pattern.
- Create a
Studentsclass.- The class should be anunextendable subclass of the
Peopleclass. - The class shouldstatically instantiate a
finalfield namedINSTANCEof typeStudents. - The class should define aprivate nullary constructor which populates the
INSTANCEfield with respectiveStudentrepresentations of your colleagues.- Each student should have arelatively unique
idfield.
- Each student should have arelatively unique
- The class should define a
getInstancemethod which returns theINSTANCEfield.
- The class should be anunextendable subclass of the
- Create a
TestStudentsclass.- Create a
testmethod which ensures that each of the students in your current cohort are in yourStudentssingleton.
- Create a
- Use
Part 7as a reference. - Create a
Instructorssingleton which represents the set of instructors at ZipCodeWilmington. - Create a
TestInstructorsclass.
- Create a
ZipCodeWilmingtonsingleton.- The class should declare a field that references the instance of
Studentscalledstudents. - The class should declare a field that references the instance of
Instructorscalledinstructors. - The class should define a method
hostLecturewhich makes use of aTeacher teacher, double numberOfHoursparameter to host alectureto the compositepersonListfield in thestudentsreference. - The class should define a method
hostLecturewhich makes use of along id, double numberOfHoursparameter to identify a respectiveInstructorto host alectureto the compositepersonListfield in thestudentsreference. - The class should define a method
getStudyMapwhich returns a new instance of amapping fromStudentobjects toDoubleobjects, representative of each respective student'stotalStudyTime.
- The class should declare a field that references the instance of
- Create a
TestZipCodeWilmingtonclass.- Create a
testHostLecturemethod which ensures that each of theStudent'stotalStudyTimeinstance variable is incremented by the specifiednumberOfHoursupon invoking thehostLecturemethod.
- Create a
- You may have noticed that the
findById, andhostLecturemethods require an intermediatecasting trick. - To remedy this issue, we cangenerify the
Peopleclass.
- Parameterize the
Peoplesignature to enforce that it is a container for objects of typeEsuch thatEis a subclass ofPerson. - Modify the class signature to declare this classabstract.
- Anabstract class cannot be instantiated; Its concrete implementation is deferred to its subclass.
- Modify
peoplefield to enforce that is a container of objects of typeE. - Modify the
addmethod to ensure that it handles object of typeE. - Modify the
findByIdmethod to ensure that it returns an object of typeE. - Modify the
getArraymethod signature by declaring itabstractof return tyoeE.- An abstract method is a subclass's contractual agreement to the deferment of an implementation of a respective method.
- Modify the
Studentsclass signature to ensure that it is a subclass ofPeopleof parameterized typeStudent. - Modify the
Instructorsclass signature to ensure that it is a subclass ofPeopleof parameterized typeInstructor. - Provide concrete implementations of the
getArraymethod in each of these classes.
- Refactor the
hostLecturemethod in theZipCodeWilmingtonclass by removing any intermediatecasting trick(s).
- Ensure that the
TestStudents,TestInstructors,TestPeople,TestZipCodeWilmingtonclasses were not affected by the refactor.
- You may have noticed that
findByIdmakes it difficult to intuitively identifywhichPersonobject is being returned. To remedy this issue, we can make use of anenumwhich manipulates a compositeinstructorobject.
- Create an enum named
Educator.- The enum should implement
Teacher. - The enum should have an enumeration for each of the instructors represented in the
Instructorsclass. - Upon construction each enumeration of the enum should instantiate a respective
Instructorand assign it to a finalinstructorfield upon construction. Theinstructorshould be added to theInstructorssingleton. - Calls to the
teachandlecturemethod should be deferred to the compositeinstructorreference. - The enum should have a
double timeWorkedfield which keeps track of the hours that theEducatorhas taught.
- The enum should implement
- Use
Part 5as a reference.
- Ensure the
hostLecturemethod can handle objects of typeEducator.
About
Week 4 Project: Instructor, Student, Classroom
Topics
Resources
Uh oh!
There was an error while loading.Please reload this page.
Stars
Watchers
Forks
Releases
No releases published
Packages0
No packages published
Uh oh!
There was an error while loading.Please reload this page.
Contributors3
Uh oh!
There was an error while loading.Please reload this page.