Skip to content

Commit cee7333

Browse files
author
Ilia_Isakhin
committed
Combined task 1 and 2
1 parent 068f58a commit cee7333

21 files changed

Lines changed: 162 additions & 283 deletions

README.md

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,13 @@
11
# Шаблон для практической работы по теме Object Oriented Programming
22

33
### Задание №1
4-
Вы проектируете систему управления проектом. В проекте может быть команда разработки и один техлид. Имплементируйте
5-
необходимые методы и убедитесь, что функция main работает корректно
4+
Вы проектируете приложение по работе с различными книгами (библиотека). Сейчас существует базовая сущность `Book` и её
5+
наследники: `Magazine`(журнал) и `Schoolbook`(учебник).
6+
Также существуют базовые интерфейсы `BookService` и `BookRepository`. В репозиториях происходит хранение сущностей в массивах
7+
и именно они производят базовые операции над сущностями (найти, создать или удалить). Также есть и специализированные
8+
интерфейсы для конкретных сущностей (`SchoolBookRepository` и `SchoolBookService`).
69

7-
### Задание №2
8-
Вы проектируете сервис по работе с книгами (библиотека). Сервис обязан производить валидацию передаваемых книг.
9-
Имплементируйте необходимые методы в классах SimpleBookRepository и SimpleBookService. Если нужно, реализуйте
10-
дополнительный функционал. В методе main напишите небольшое демо, которые демострирует работу всех методов сервиса и
11-
репозитория
10+
Ваши задачи:
11+
+ Добавить еще одну сущность, которая наследует базовую сущность `Book`.
12+
+ Добавить репозиторий и сервис для работы с новой сущностью.
13+
+ Реализовать функции, которые имплементируются в репзитории и сервисах.

src/main/java/ru/izh/online/course/task2/Main.java renamed to src/main/java/ru/izh/online/course/Main.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package ru.izh.online.course.task2;
1+
package ru.izh.online.course;
22

33
public class Main {
44

src/main/java/ru/izh/online/course/task2/entity/Author.java renamed to src/main/java/ru/izh/online/course/entity/Author.java

File renamed without changes.
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
package ru.izh.online.course.entity;
2+
3+
/**
4+
* Базовая сущность для кинг, журналов и тп.
5+
*/
6+
public abstract class BasicEntity {
7+
8+
protected long id;
9+
protected int pages;
10+
protected String name;
11+
12+
public long getId() {
13+
return id;
14+
}
15+
16+
public void setId(long id) {
17+
this.id = id;
18+
}
19+
20+
public int getPages() {
21+
return pages;
22+
}
23+
24+
public void setPages(int pages) {
25+
this.pages = pages;
26+
}
27+
28+
public String getName() {
29+
return name;
30+
}
31+
32+
public void setName(String name) {
33+
this.name = name;
34+
}
35+
}
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
package ru.izh.online.course.entity;
2+
3+
import java.time.LocalDate;
4+
5+
/**
6+
* Книга. Кроме id, количества страниц и названия имеет автора и дату публикации
7+
*/
8+
public class Book extends BasicEntity{
9+
10+
private Author author;
11+
private LocalDate publishDate;
12+
13+
public Book(long id, String name, int pages, Author author, LocalDate publishDate) {
14+
this.id = id;
15+
this.name = name;
16+
this.pages = pages;
17+
this.author = author;
18+
this.publishDate = publishDate;
19+
}
20+
21+
public Author getAuthor() {
22+
return author;
23+
}
24+
25+
public void setAuthor(Author author) {
26+
this.author = author;
27+
}
28+
29+
public LocalDate getPublishDate() {
30+
return publishDate;
31+
}
32+
33+
public void setPublishDate(LocalDate publishDate) {
34+
this.publishDate = publishDate;
35+
}
36+
}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
package ru.izh.online.course.repository;
2+
3+
import ru.izh.online.course.entity.Book;
4+
5+
/**
6+
* Базовый инерфейс для сущностей, который наследуют BasicEntity. Имеет стандартные операции поиска, вставки и удаления
7+
* @param <T>
8+
*/
9+
public interface BookRepository<T extends Book> {
10+
11+
T get(long id);
12+
13+
boolean add(T entity);
14+
15+
boolean remove(String name);
16+
17+
T[] getAll(String name);
18+
}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
package ru.izh.online.course.repository;
2+
3+
import ru.izh.online.course.entity.Author;
4+
import ru.izh.online.course.entity.Schoolbook;
5+
6+
import java.time.LocalDate;
7+
8+
/**
9+
* Интерфейс для репозитория книг. Может искать книги по автору или дате публикации
10+
*/
11+
public interface SchoolBookRepository {
12+
13+
Schoolbook[] getAuthorBools(Author author);
14+
15+
Schoolbook[] getBooksByPublishDate(LocalDate publishDate);
16+
}

src/main/java/ru/izh/online/course/task2/repository/SimpleBookRepository.java renamed to src/main/java/ru/izh/online/course/repository/SimpleSchoolBookRepository.java

Lines changed: 23 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,16 @@
1-
package ru.izh.online.course.task2.repository;
1+
package ru.izh.online.course.repository;
22

3-
import ru.izh.online.course.task2.entity.Author;
4-
import ru.izh.online.course.task2.entity.Book;
3+
import ru.izh.online.course.entity.Author;
4+
import ru.izh.online.course.entity.Schoolbook;
55

6-
import java.util.Date;
6+
import java.time.LocalDate;
77

88
import static java.time.LocalDate.of;
99

1010
/**
1111
* Репозиторий книг. Имеет внутри себя массив книг и методы для работы с ним. ID генерируется методом getNextId
1212
*/
13-
public class SimpleBookRepository implements BookRepository {
13+
public class SimpleSchoolBookRepository implements BookRepository<Schoolbook>, SchoolBookRepository {
1414

1515
private static long bookIdHolder;
1616

@@ -25,11 +25,11 @@ public static long getNextId() {
2525

2626
};
2727

28-
private Book[] books = {
29-
new Book(getNextId(), "Effective Java Programming", 412, AUTHORS[0], of(2018, 1 ,6)),
30-
new Book(getNextId(), "Java Concurrency in Practice", 432 , AUTHORS[1], of(2006, 5, 19)),
31-
new Book(getNextId(), "Concurrent Programming in Java: Design Principles and Patterns", 339 , AUTHORS[1], of(1997, 10, 25)),
32-
new Book(getNextId(), "Introduction to Algorithms", 1292 , AUTHORS[2], of(2009, 7, 31))
28+
private Schoolbook[] schoolbooks = {
29+
new Schoolbook(getNextId(), "Effective Java Programming", 412, AUTHORS[0], of(2018, 1 ,6)),
30+
new Schoolbook(getNextId(), "Java Concurrency in Practice", 432 , AUTHORS[1], of(2006, 5, 19)),
31+
new Schoolbook(getNextId(), "Concurrent Programming in Java: Design Principles and Patterns", 339 , AUTHORS[1], of(1997, 10, 25)),
32+
new Schoolbook(getNextId(), "Introduction to Algorithms", 1292 , AUTHORS[2], of(2009, 7, 31))
3333
};
3434

3535
/**
@@ -38,17 +38,17 @@ public static long getNextId() {
3838
* @return удалось добавить книгу или нет.
3939
*/
4040
@Override
41-
public Book get(long id) {
41+
public Schoolbook get(long id) {
4242
return null; //TODO
4343
}
4444

4545
/**
4646
* Должен добавлять в массив книг новую книгу.
47-
* @param book сущность книга.
47+
* @param schoolbook сущность книга.
4848
* @return true если книга была добавлена.
4949
*/
5050
@Override
51-
public boolean add(Book book) {
51+
public boolean add(Schoolbook schoolbook) {
5252
return false; //TODO
5353
}
5454

@@ -64,21 +64,21 @@ public boolean remove(String name) {
6464

6565
/**
6666
* Должен возвращать из массива книг все книги с автором authorName
67-
* @param authorName
67+
* @param name
6868
* @return Массив книг
6969
*/
7070
@Override
71-
public Book[] getAll(String authorName) {
72-
return new Book[0]; //TODO
71+
public Schoolbook[] getAll(String name) {
72+
return new Schoolbook[0]; //TODO
73+
}
74+
75+
@Override
76+
public Schoolbook[] getAuthorBools(Author author) {
77+
return new Schoolbook[0]; //TODO
7378
}
7479

75-
/**
76-
* Должен возвращать из массива книг все книги которые были изданы в publishDate
77-
* @param publishDate
78-
* @return Массив книг
79-
*/
8080
@Override
81-
public Book[] getAll(Date publishDate) {
82-
return new Book[0]; //TODO
81+
public Schoolbook[] getBooksByPublishDate(LocalDate publishDate) {
82+
return new Schoolbook[0]; //TODO
8383
}
8484
}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
package ru.izh.online.course.service;
2+
3+
import ru.izh.online.course.entity.Book;
4+
5+
public interface BasicBookService<T extends Book> {
6+
7+
T get(long id);
8+
9+
boolean add(T book);
10+
11+
boolean remove(String name);
12+
13+
T[] getAll(String name);
14+
}

src/main/java/ru/izh/online/course/task2/service/SimpleBookService.java renamed to src/main/java/ru/izh/online/course/service/SimpleSchoolBookService.java

Lines changed: 10 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,35 +1,33 @@
1-
package ru.izh.online.course.task2.service;
1+
package ru.izh.online.course.service;
22

3-
import ru.izh.online.course.task2.entity.Book;
4-
import ru.izh.online.course.task2.repository.BookRepository;
5-
import ru.izh.online.course.task2.repository.SimpleBookRepository;
6-
7-
import java.util.Date;
3+
import ru.izh.online.course.entity.Schoolbook;
4+
import ru.izh.online.course.repository.BookRepository;
5+
import ru.izh.online.course.repository.SimpleSchoolBookRepository;
86

97
/**
108
* Сервис по работе с книгами. Должен вызывать bookRepository
119
*/
12-
public class SimpleBookService implements BookService {
10+
public class SimpleSchoolBookService implements BasicBookService<Schoolbook> {
1311

14-
private BookRepository bookRepository = new SimpleBookRepository();
12+
private BookRepository basicEntityRepository = new SimpleSchoolBookRepository();
1513

1614
/**
1715
* Должен получать книгу по Id из репозитория.
1816
* @param id
1917
* @return Книгу если найдена. В противном случае печатать в консоль сообщение с ошибкой
2018
*/
2119
@Override
22-
public Book get(long id) {
20+
public Schoolbook get(long id) {
2321
return null; //TODO
2422
}
2523

2624
/**
2725
* Должен получать добавлять книгу в репозиторий.
28-
* @param book
26+
* @param schoolbook
2927
* @return true если добавлена. В противном случае печатать в консоль сообщение с ошибкой
3028
*/
3129
@Override
32-
public boolean add(Book book) {
30+
public boolean add(Schoolbook schoolbook) {
3331
return false; //TODO
3432
}
3533

@@ -49,18 +47,7 @@ public boolean remove(String name) {
4947
* @return Книги если найдены. В противном случае печатать в консоль сообщение с ошибкой
5048
*/
5149
@Override
52-
public Book[] getAll(String authorName) {
53-
return null; //TODO
54-
}
55-
56-
/**
57-
* Должен получать книгу по Id из репозитория.
58-
* @param publishDate
59-
* @return Книги если найдены. В противном случае печатать в консоль сообщение с ошибкой
60-
*/
61-
@Override
62-
public Book[] getAll(Date publishDate) {
50+
public Schoolbook[] getAll(String authorName) {
6351
return null; //TODO
6452
}
65-
6653
}

0 commit comments

Comments
 (0)