Lab5 ООП
.docxМИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ УКРАИНЫ
Одесский национальный политехнический университет
Институт компьютерных систем
Кафедра информационных систем
Протокол
лабораторной работы № 5
«Механизм полиморфизма»
по дисциплине
«Объектно-ориентированное программирование»
студент группы АИ-171
Анищенко Н. А.
Преподаватели:
Годовиченко Н.А.
Одесса 2018
Задание 1
1. Создайте класс Person, который должен содержать конструктор, геттеры\сеттеры и следующие поля:
-
фамилия;
-
имя;
-
возраст.
Переопределите метод toString(), который должен возвращать строку следующего формата: Человек <фамилия> <имя>, возраст: <возраст>
public class Person { private String name; private String lastname; private int age;
public Person(String name, String lastname, int age) { this.name = name; this.lastname = lastname; this.age = age; }
public String getName() { return name; }
public String getLastname() { return lastname; } |
public int getAge() { return age; }
public void setName(String name) { this.name = name; }
public void setLastname(String lastname) { this.lastname = lastname; }
public void setAge(int age) { this.age = age; }
@Override public String toString() { return "Человек " + lastname + " " + name + ", возраст: " + age; } } |
2. Создайте класс Student, который должен наследоваться от класса Person. Добавьте конструктор, геттеры\сеттеры и следующие поля:
-
группа;
-
номер студенческого билета.
Переопределите метод toString(), который должен возвращать строку следующего формата: Студент группы <группа>, <фамилия> <имя>, возраст: <возраст>. Номер студенческого билета: <номер>
public class Student extends Person {
private int group; private int studentID;
public Student(String name, String lastname, int age, int group, int studentID) { super(name, lastname, age); this.group = group; this.studentID = studentID; }
public int getGroup() { return group; }
public int getStudentID() { return studentID; } |
public void setGroup(int group) { this.group = group; }
public void setStudentID(int studentID) { this.studentID = studentID; }
@Override public String toString() { return "Студент группы " + group + ", " + getLastname() + " " + getName() + ", возраст: " + getAge() + ". Номер студенческого билета: "+ studentID; } } |
3. Создайте класс Lecturer, который должен наследоваться от класса Person. Добавьте конструктор, геттеры\сеттеры и следующие поля:
-
кафедра;
-
зарплата.
Переопределите метод toString(), который должен возвращать строку следующего формата: Преподаватель кафедры <кафедра>, <фамилия> <имя>, возраст: <возраст>. Зарплата: <зарплата>
public class Lecturer extends Person { private String department; private int payment; public Lecturer(String name, String lastname, int age, String department, int payment) { super(name, lastname, age); this.department = department; this.payment = payment; } public String getDepartment() { return department; } public int getPayment() { return payment; } |
public void setDepartment(String department) { this.department = department; } public void setPayment(int payment) { this.payment = payment; } @Override public String toString() { return "Преподаватель кафедры " + department + ", " + getLastname() + " " + getName() + ", возраст: " + getAge() + ". Зарплата: " + payment; } } |
4. Используя восходящее преобразование, создайте в классе Main несколько объектов классов Student и Lecturer, после чего создайте массив, который бы мог включать объекты классов Person, Student, Lecturer. Заполните массив объектами этих классов.
5. Используя цикл, обратитесь к элементам массива и выведите в консоль, с помощью метода toString(), информацию от каждого объекта.
public class Main { public static void main(String[] args) { Lecturer l1 = new Lecturer("Petr", "Ivanov", 33,"IS", 8000); Lecturer l2 = new Lecturer("Grigory", "Veslov", 60,"IM", 10000); Student s1 = new Student("Vasya", "Pupkin",20,33,43535); Student s2 = new Student("Lesha", "Bobuh",29,55,23985);
|
Person pArray[] = new Person[]{l1,s1,l2,s2}; for (Person p : pArray) { System.out.println(p.toString()); } } } |
2. Модификация программы Draw
Скачайте архив с проектом по этому адресу - http://bit.ly/2y1N0AV
Данная программа позволяет рисовать простые фигуры. С помощью кнопок на верхней панели выбираете нужную фигуру, после чего в поле рисования зажимаете кнопку мыши и рисуете фигуру нужных размеров.
-
Откройте проект, прочитайте комментарии, разберитесь как работает приложение;
-
Используя механизм полиморфизма, модифицируйте программу, добавив возможность выбирать и рисовать эллипсы;
-
Задание на дополнительный балл. Добавьте в программу кнопку Clear, по нажатию на которую программа должна стирать все фигуры.
Измененные фрагменты кода
в PaintSurface.java
if (shapeType == DrawShape.SHAPE_RECTANGLE) { shape = new Rectangle(); } else if (shapeType == DrawShape.SHAPE_ROUNDED_RECT) { shape = new RoundedRectangle(); } else if(shapeType == DrawShape.SHAPE_ELLIPSE){ shape = new Ellipse(); } else { return; }
в DrawFrame.java
BigTextButton ellipse = new BigTextButton("Ellipse"); ellipse.addActionListener(e->{ surface.setShapeType(DrawShape.SHAPE_ELLIPSE); }); buttonPanel.add(ellipse); BigTextButton clear = new BigTextButton("Clear"); clear.addActionListener(e->{ surface.clear(); }); buttonPanel.add(clear);
в Ellipse.java
public class Ellipse extends DrawShape { public Ellipse() { } public Ellipse(Point startPoint, Point endPoint) { super(startPoint, endPoint); } @Override public Shape getShape(Point startPoint, Point endPoint) { return new Ellipse2D.Double(Math.min(startPoint.getX(), endPoint.getX()), Math.min(startPoint.getY(), endPoint.getY()), Math.abs(startPoint.getX() - endPoint.getX()), Math.abs(startPoint.getY() - endPoint.getY())); } }
Выводы
Входе написания лабораторной работы были изучены принципы полиморфизма. А также была усовершенствована программа Draaw