Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Lab3 ООП

.docx
Скачиваний:
20
Добавлен:
14.12.2018
Размер:
21.3 Кб
Скачать

МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ УКРАИНЫ

Одесский национальный политехнический университет

Институт компьютерных систем

Кафедра информационных систем

Протокол

лабораторной работы № 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 +

'}';

}

}

Выводы

В ходе выполнения лабораторной работы были созданы три класса (два по ТЗ и одни обеспечивающий корректную работу этих классов). При написании классов были применены принципы инкапсуляции и полиморфизма.

Соседние файлы в предмете Объектно ориентированное программирование