Lab3 ООП
.docx
МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ УКРАИНЫ
Одесский национальный политехнический университет
Институт компьютерных систем
Кафедра информационных систем
Протокол
лабораторной работы № 3
«Перегрузка методов. Инкапсуляция»
по дисциплине
«Объектно-ориентированное программирование»
студент группы АИ-171
Анищенко Никита Александрович
Преподаватели:
Годовиченко Н.А.
Одесса 2018
Класс UniqueChecker
Поля
private ArrayList<Integer> presentedValues |
Массив зарезервированных значений |
Методы
public UniqueChecker() |
Конструктор |
public void add(int value) |
Резервирует значение value |
public boolean isUnique(int value) |
Проверяет уникальность value |
Код
public class UniqueChecker {
private ArrayList<Integer> presentedValues;
public UniqueChecker() {
this.presentedValues = new ArrayList<Integer>();
}
public void add(int value){
presentedValues.add(value);
}
public boolean isUnique(int value){
for (int i : presentedValues ) {
if(i == value){
return false;
}
}
return true;
}
}
Класс Student
Поля
private String name; |
Имя |
private String lastname; |
Фамилия |
private int admissionYear; |
Год поступления |
private int markBookCode; |
уникальный шестизначный номер зачетной книжки |
private static UniqueChecker uniqueChecker |
Объект для проверки уникальности markBookCode |
Методы
public Student(String name, String lastname, int admissionYear) |
Конструктор принимает на вход имя, фамилию и год поступления. При использовании данного конструктора, в номер зачетной книжки записывается 0 |
public Student(String name, String lastname, int admissionYear, int markBookCode) |
принимает на вход имя, фамилию, год поступления номер зачетной книжки |
public String getName() |
метод возвращает имя студента |
public String getLastname() |
метод возвращает фамилию студента |
public int getAdmissionYear() |
метод возвращает номер зачетной книжки |
public int getMarkBookCode() |
метод возвращает год поступления |
public void setName(String name) |
метод изменяет имя студента |
public void setLastname(String lastname) |
метод изменяет фамилию студента |
public void setAdmissionYear(int admissionYear) |
метод изменяет номер зачетной книжки |
public void setMarkBookCode(int markBookCode) |
метод изменяет год поступления |
public int compareTo(Student student) |
Переопределенный метод сравнения для сортировки |
public String toString() |
Переопределенный метод для корректного вывода информации |
Код
public class Student implements Comparable<Student>{
private String name;
private String lastname;
private int admissionYear;
private int markBookCode;
private static UniqueChecker uniqueChecker = new UniqueChecker();
public Student(String name, String lastname, int admissionYear) {
this.name = name;
this.lastname = lastname;
this.admissionYear = admissionYear;
this.markBookCode = 0;
}
public Student(String name, String lastname, int admissionYear, int markBookCode) {
if(!uniqueChecker.isUnique(markBookCode)){
throw new IllegalArgumentException("This mark book code already exist");
}
uniqueChecker.add(markBookCode);
this.name = name;
this.lastname = lastname;
this.admissionYear = admissionYear;
this.markBookCode = markBookCode;
}
public String getName() {
return name;
}
public String getLastname() {
return lastname;
}
public int getAdmissionYear() {
return admissionYear;
}
public int getMarkBookCode() {
return markBookCode;
}
public void setName(String name) {
this.name = name;
}
public void setLastname(String lastname) {
this.lastname = lastname;
}
public void setAdmissionYear(int admissionYear) {
this.admissionYear = admissionYear;
}
public void setMarkBookCode(int markBookCode) {
if(!uniqueChecker.isUnique(markBookCode)){
throw new IllegalArgumentException("This mark book code already exist");
}
uniqueChecker.add(markBookCode);
this.markBookCode = markBookCode;
}
@Override
public int compareTo(Student student) {
if(this.lastname.compareTo(student.lastname) != 0 ){
return this.lastname.compareTo(student.lastname);
}else if( this.name.compareTo(student.name) != 0){
return this.name.compareTo(student.name);
}else{
return this.markBookCode - student.markBookCode;
}
}
@Override
public String toString() {
return "Student{" +
"name='" + name + '\'' +
", lastname='" + lastname + '\'' +
", admissionYear=" + admissionYear +
", markBookCode=" + markBookCode +
'}';
}
}
Класс Group
Поля
private int groupCode |
уникальный номер (в пределах специальности) |
private ArrayList<Student> students |
массив студентов |
private static UniqueChecker uniqueChecker |
Объект для проверки уникальности groupCode |
Методы
public Group(int groupCode) |
принимает на вход номер группы (в этом случае, количество студентов записывается как 0) |
public Group(int groupCode, int studentsNumber) |
принимает на вход номер группы, количество студентов (инициализация массива, но его элементы остаются пустыми) |
public Group(ArrayList<Student> students) |
принимает на вход массив студентов |
public Group(int groupCode, ArrayList<Student> students) |
принимает на вход номер группы и массив студентов |
public int getGroupCode() |
метод возвращает номер группы |
public int getStudentsNumber() |
метод возвращает общее число студентов группы |
public void setGroupCode(int groupCode) |
метод изменяет номер группы |
public ArrayList<Student> getStudents() |
метод возвращает массив студентов |
public Student getStudenmByCode(int code) |
метод возвращает ссылку на студента по номеру зачетной книжки |
public void deleteStudenmByCode(int code) |
метод удаляет студента из группы по номеру зачетной книжки (помните про корректное удаление элемента из массива) |
public void addStudent(Student s) |
метод добавляет нового студента в группу (принимает на вход ссылку на объект Student, если массив уже полностью заполнен - реализуйте расширение массива) |
public ArrayList<Student> getSortedStudents() |
метод возвращает массив студентов, отсортированный по фамилиям (подумайте, как это сделать; если фамилии одинаковы - сортируйте по имени; если имена одинаковы - по номеру зачетной книжки) |
public String toString() |
Переопределенный метод для корректного вывода информации |
Код
public class Group {
private int groupCode;
private ArrayList<Student> students;
private static UniqueChecker uniqueChecker = new UniqueChecker();
public Group(int groupCode) {
if(!uniqueChecker.isUnique(groupCode)){
throw new IllegalArgumentException("This group code already exist");
}
uniqueChecker.add(groupCode);
this.groupCode = groupCode;
this.students = new ArrayList<Student>();
}
public Group(int groupCode, int studentsNumber) {
if(!uniqueChecker.isUnique(groupCode)){
throw new IllegalArgumentException("This group code already exist");
}
uniqueChecker.add(groupCode);
this.groupCode = groupCode;
this.students = new ArrayList<Student>(studentsNumber);
}
public Group(ArrayList<Student> students) {
this.groupCode = 0;
this.students = students;
}
public Group(int groupCode, ArrayList<Student> students) {
if(!uniqueChecker.isUnique(groupCode)){
throw new IllegalArgumentException("This group code already exist");
}
uniqueChecker.add(groupCode);
this.groupCode = groupCode;
this.students = students;
}
public int getGroupCode() {
return groupCode;
}
public int getStudentsNumber() {
return students.size();
}
public void setGroupCode(int groupCode) {
if(!uniqueChecker.isUnique(groupCode)){
throw new IllegalArgumentException("This group code already exist");
}
uniqueChecker.add(groupCode);
this.groupCode = groupCode;
}
public ArrayList<Student> getStudents() {
return students;
}
public Student getStudenmByCode(int code){
for(Student s : students){
if(s.getMarkBookCode() == code){
return s;
}
}
return null;
}
public void deleteStudenmByCode(int code){
for(int i = 0; i < students.size(); i++){
if(students.get(i).getMarkBookCode() == code){
students.remove(i);
return;
}
}
}
public void addStudent(Student s){
students.add(s);
}
public ArrayList<Student> getSortedStudents(){
Collections.sort(this.students);
return this.students;
}
@Override
public String toString() {
return "Group{" +
"groupCode=" + groupCode +
", studentsNumber=" + students.size() +
", students=" + students +
'}';
}
}
Выводы
В ходе выполнения лабораторной работы были созданы три класса (два по ТЗ и одни обеспечивающий корректную работу этих классов). При написании классов были применены принципы инкапсуляции и полиморфизма.