diff --git a/.gitignore b/.gitignore index 53c8398..303840e 100644 --- a/.gitignore +++ b/.gitignore @@ -9,6 +9,7 @@ local.properties .settings/ .loadpath .recommenders +*.plantuml # External tool builders .externalToolBuilders/ diff --git a/src/main/java/com/github/curriculeon/Instructor.java b/src/main/java/com/github/curriculeon/Instructor.java new file mode 100644 index 0000000..8fff551 --- /dev/null +++ b/src/main/java/com/github/curriculeon/Instructor.java @@ -0,0 +1,23 @@ +package com.github.curriculeon; +/* + The Instructor class is a person and can teach. + */ +public class Instructor extends Person implements Teacher{ + + public Instructor(long id, String name) { + super(id, name); + } + + @Override + public void teach(Learner learner, double numberOfHours) { + learner.learn(numberOfHours); + } + + @Override + public void lecture(Learner[] learners, double numberOfHours) { + double numberOfHoursPerLearner = numberOfHours / learners.length; + for (Learner learner : learners) { + learner.learn(numberOfHoursPerLearner); + } + } +} diff --git a/src/main/java/com/github/curriculeon/Learner.java b/src/main/java/com/github/curriculeon/Learner.java new file mode 100644 index 0000000..591b6d7 --- /dev/null +++ b/src/main/java/com/github/curriculeon/Learner.java @@ -0,0 +1,9 @@ +package com.github.curriculeon; +/* + Interfaces do not implement their own methods, they only provide the signature and final variables. + Classes that use the interface must implement the methods on their own. + */ +public interface Learner { + public void learn(double numberOfHours); + public Double getTotalStudyTime(); +} diff --git a/src/main/java/com/github/curriculeon/People.java b/src/main/java/com/github/curriculeon/People.java new file mode 100644 index 0000000..c1866a8 --- /dev/null +++ b/src/main/java/com/github/curriculeon/People.java @@ -0,0 +1,55 @@ +package com.github.curriculeon; + +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; + +public class People implements Iterable { + private List personList = new ArrayList<>(); + + public void add(Person person){ + personList.add(person); + } + + public Person findById(long id){ + try { + for(Person person : personList){ + if(person.getId().equals(id)){ + return person; + } + } + } catch (Exception e) { + System.out.println("Person not found!!!"); + } + return null; + } + + public Boolean contains(Person person){ + return personList.contains(person); + } + + public void remove(Person person){ + personList.remove(person); + } + + public void remove(long id){ + personList.remove(findById(id)); + } + + public void removeAll(){ + personList.clear(); + } + + public Integer count(){ + return personList.size(); + } + + public Person[] toArray(){ + return (Person[]) personList.toArray(); + } + + @Override + public Iterator iterator() { + return personList.iterator(); + } +} diff --git a/src/main/java/com/github/curriculeon/Person.java b/src/main/java/com/github/curriculeon/Person.java index 3c8350b..c86e2f9 100644 --- a/src/main/java/com/github/curriculeon/Person.java +++ b/src/main/java/com/github/curriculeon/Person.java @@ -1,5 +1,23 @@ package com.github.curriculeon; public class Person { + final private long id; + private String name; + public Person(long id, String name) { + this.id = id; + this.name = name; + } + + public Long getId() { + return id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } } diff --git a/src/main/java/com/github/curriculeon/Student.java b/src/main/java/com/github/curriculeon/Student.java new file mode 100644 index 0000000..ee41229 --- /dev/null +++ b/src/main/java/com/github/curriculeon/Student.java @@ -0,0 +1,24 @@ +package com.github.curriculeon; +/* + The Student class is a Person and can learn. + Student must call parent's constructor using keyword super if that constructor uses arguments to be instantiated. + */ +public class Student extends Person implements Learner{ + private double totalStudyTime; + + public Student(long id, String name) { + super(id, name); + this.totalStudyTime = 0; + } + + + @Override + public void learn(double numberOfHours) { + totalStudyTime += numberOfHours; + } + + @Override + public Double getTotalStudyTime() { + return totalStudyTime; + } +} diff --git a/src/main/java/com/github/curriculeon/Teacher.java b/src/main/java/com/github/curriculeon/Teacher.java new file mode 100644 index 0000000..7de72a1 --- /dev/null +++ b/src/main/java/com/github/curriculeon/Teacher.java @@ -0,0 +1,6 @@ +package com.github.curriculeon; + +public interface Teacher { + public void teach(Learner learner, double numberOfHours); + public void lecture(Learner[] learners, double numberOfHours); +} diff --git a/src/test/java/com/github/curriculeon/TestInstructor.java b/src/test/java/com/github/curriculeon/TestInstructor.java new file mode 100644 index 0000000..afb21af --- /dev/null +++ b/src/test/java/com/github/curriculeon/TestInstructor.java @@ -0,0 +1,62 @@ +package com.github.curriculeon; + +import junit.framework.TestCase; +import org.junit.Test; + +public class TestInstructor extends TestCase { + + @Test + public void testImplementation(){ + //given & when + Instructor instructor = new Instructor(1, "test"); + + //then + assert instructor instanceof Teacher; + } + + @Test + public void testInheritance(){ + //given & when + Instructor instructor = new Instructor(1, "test"); + + //then + assert instructor instanceof Person; + } + + @Test + public void testTeach() { + //given + Instructor instructor = new Instructor(1, "test"); + Student student = new Student(1, "test"); + + //when + double expected = 5; + instructor.teach(student, expected); + + //then + assertEquals(expected, student.getTotalStudyTime()); + } + + @Test + public void testLecture() { + //given + Instructor instructor = new Instructor(1, "test"); + Student student1 = new Student(1, "test1"); + Student student2 = new Student(2, "test2"); + Student student3 = new Student(3, "test3"); + Student student4 = new Student(4, "test4"); + Student[] students = new Student[]{ + student1, student2, student3, student4 + }; + double numberOfHours = 50; + double numberOfHoursPerStudent = numberOfHours / students.length; + + //when + instructor.lecture(students, numberOfHours); + + //then + for (Student student: students) { + assertEquals(numberOfHoursPerStudent, student.getTotalStudyTime()); + } + } +} \ No newline at end of file diff --git a/src/test/java/com/github/curriculeon/TestPeople.java b/src/test/java/com/github/curriculeon/TestPeople.java new file mode 100644 index 0000000..f5a9e25 --- /dev/null +++ b/src/test/java/com/github/curriculeon/TestPeople.java @@ -0,0 +1,40 @@ +package com.github.curriculeon; + +import junit.framework.TestCase; +import org.junit.Test; + +import java.util.ArrayList; + +public class TestPeople extends TestCase { + + @Test + public void testAdd() { + Person expectedPerson = new Person(22, "Ezra"); + People peopleList = new People(); + + peopleList.add(expectedPerson); + + assertTrue(peopleList.contains(expectedPerson)); + } + + @Test + public void testFindById() { + Long expectedId = 5L; + Person expectedPerson = new Person(expectedId, "Ezra"); + People peopleList = new People(); + peopleList.add(expectedPerson); + + assertEquals(expectedPerson.getId(), peopleList.findById(expectedId).getId()); + } + + @Test + public void testRemove() { + Person expectedPerson = new Person(7, "Ezra"); + People peopleList = new People(); + peopleList.add(expectedPerson); + + peopleList.remove(expectedPerson); + + assertFalse(peopleList.contains(expectedPerson)); + } +} \ No newline at end of file diff --git a/src/test/java/com/github/curriculeon/TestPerson.java b/src/test/java/com/github/curriculeon/TestPerson.java index 6c523fe..c7b4892 100644 --- a/src/test/java/com/github/curriculeon/TestPerson.java +++ b/src/test/java/com/github/curriculeon/TestPerson.java @@ -1,5 +1,29 @@ package com.github.curriculeon; -public class TestPerson { +import junit.framework.TestCase; +import org.junit.Test; -} +public class TestPerson extends TestCase { + + @Test + public void testConstructor() { + //given & when + Long expectedID = 1L; + String expectedName = "Ezra"; + Person guy = new Person(expectedID, expectedName); + //then + assertEquals(expectedID, guy.getId()); + assertEquals(expectedName, guy.getName()); + } + + @Test + public void testSetName() { + //given + Person guy = new Person(0,"test"); + //when + String expected = "Ezra"; + guy.setName(expected); + //then + assertEquals(expected, guy.getName()); + } +} \ No newline at end of file diff --git a/src/test/java/com/github/curriculeon/TestStudent.java b/src/test/java/com/github/curriculeon/TestStudent.java new file mode 100644 index 0000000..fad95c1 --- /dev/null +++ b/src/test/java/com/github/curriculeon/TestStudent.java @@ -0,0 +1,38 @@ +package com.github.curriculeon; + +import junit.framework.TestCase; +import org.junit.Test; + +public class TestStudent extends TestCase { + + @Test + public void testImplementation(){ + //given & when + Student student = new Student(1, "Test"); + + //then + assert student instanceof Learner; + } + + @Test + public void testInheritance(){ + //given & when + Student student = new Student(1, "Test"); + + //then + assert student instanceof Person; + } + + @Test + public void testLearn() { + //given + Student student = new Student(1, "Test"); + + //when + double hours = 5; + student.learn(hours); + + //then + assertEquals(hours, student.getTotalStudyTime()); + } +} \ No newline at end of file