Lab4 ООП
.docxМИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ УКРАИНЫ
Одесский национальный политехнический университет
Институт компьютерных систем
Кафедра информационных систем
Протокол
лабораторной работы № 4
«Механизм наследования»
по дисциплине
«Объектно-ориентированное программирование»
студент группы АИ-171
Анищенко Н. А.
Преподаватели:
Годовиченко Н.А.
Одесса 2018
Задание 1
Класс Animal
Поля
public String Name |
Кличка |
public int age |
Возраст |
public String gender |
Пол |
Методы
public Animal(String name, int age, String gender) |
Конструктор, принимает имя, возраст и пол |
public void makeSound() |
Выводит в консоль «звук» животного |
Код
public class Animal { public String Name; public int age; public String gender; public Animal(String name, int age, String gender) { Name = name; this.age = age; this.gender = gender; } public void makeSound(){ System.out.println("Makes sound"); } }
Класс Dog – наследник Animal
Поля
Аналогичны суперклассу
Методы
public Dog(String name, int age, String gender) |
Конструктор, принимает имя, возраст и пол |
@Override public void makeSound() |
Выводит в консоль «звук» животного |
Код
public class Dog extends Animal { public Dog(String name, int age, String gender) { super(name, age, gender); } @Override public void makeSound() { System.out.println("Gav-Gav"); } }
Класс Frog – наследник Animal
Поля
Аналогичны суперклассу
Методы
public Frog(String name, int age, String gender) |
Конструктор, принимает имя, возраст и пол |
@Override public void makeSound() |
Выводит в консоль «звук» животного |
Код
public class Frog extends Animal { public Frog(String name, int age, String gender) { super(name, age, gender); } @Override public void makeSound() { System.out.println("Kva-Kva"); } }
Класс Cat – наследник Animal
Поля
Аналогичны суперклассу
Методы
public Cat(String name, int age, String gender) |
Конструктор, принимает имя, возраст и пол |
@Override public void makeSound() |
Выводит в консоль «звук» животного |
Код
public class Cat extends Animal { public Cat(String name, int age, String gender) { super(name, age, gender); } @Override public void makeSound() { System.out.println("Meou-Meou"); } }
Класс Kitten – наследник Cat
Поля
Аналогичны суперклассу
Методы
public Kitten(String name, int age) |
Конструктор, принимает имя и возраст |
@Override public void makeSound() |
Выводит в консоль «звук» животного |
Код
public class Kitten extends Cat { public Kitten(String name, int age) { super(name, age, "female"); } @Override public void makeSound() { System.out.println("Miay-Miay"); } }
Класс Tomcat – наследник Cat
Поля
Аналогичны суперклассу
Методы
public Tomcat(String name, int age) |
Конструктор, принимает имя и возраст |
@Override public void makeSound() |
Выводит в консоль «звук» животного |
Код
public class Tomcat extends Cat { public Tomcat(String name, int age) { super(name, age, "male"); } @Override public void makeSound() { System.out.println("What is tomcat?"); } }
Задание 2
Класс Bank
Поля
private Client client; |
Объект клиента |
private double balance; |
Сумма на счету |
private float percent; |
Проценты по ставке |
Методы
public Bank(Client client, double balance, float percent) |
Конструктор, принимает объект клиента, сумму на счету и процентную ставку |
public Client getClient() |
Возвращает объект клиента |
public double getBalance() |
Возвращает баланс |
public float getPercent() |
Возвращает процентную ставку |
public void setClient(Client client) |
Устанавливает объект клиента |
public void setBalance(double balance) |
Устанавливает баланс |
public void setPercent(float percent) |
Устанавливает процентную ставку |
public double countPercent(int period) |
Высчитывает проценты |
Код
public class Bank { private Client client; private double balance; private float percent; public Bank(Client client, double balance, float percent) { this.client = client; this.balance = balance; this.percent = percent; } public Client getClient() { return client; } public double getBalance() { return balance; } public float getPercent() { return percent; } public void setClient(Client client) { this.client = client; } public void setBalance(double balance) { this.balance = balance; } public void setPercent(float percent) { this.percent = percent; } public double countPercent(int period){ return 0; } }
Класс Deposit – наследник Bank
Поля
Аналогичны суперклассу
Методы
public Deposit(Client client, double balance, float percent) |
Конструктор, принимает объект клиента, сумму на счету и процентную ставку |
@Override public double countPercent(int period) |
Высчитывает проценты по депозитному счету |
Код
public class Deposit extends Bank { public Deposit(Client client, double balance, float percent) { super(client, balance, percent); } @Override public double countPercent(int period) { return getBalance() < 1000 && getBalance() > 0 ? 0 : (getBalance()/100)*getPercent()*period; } }
Класс Credit – наследник Bank
Поля
Аналогичны суперклассу
Методы
public Credit(Client client, double balance, float percent) |
Конструктор, принимает объект клиента, сумму на счету и процентную ставку |
@Override public double countPercent(int period) |
Высчитывает проценты по кредитному счету |
Код
public class Credit extends Bank { public Credit(Client client, double balance, float percent) { super(client, balance, percent); } @Override public double countPercent(int period) { if(getClient() instanceof Entity && period > 2) return (getBalance()/100)*getPercent()*(period - 2); else if(getClient() instanceof Individual && period > 3) return (getBalance()/100)*getPercent()*(period-3); else return 0; } }
Класс Mortgage – наследник Bank
Поля
Аналогичны суперклассу
Методы
public Mortgage(Client client, double balance, float percent) |
Конструктор, принимает объект клиента, сумму на счету и процентную ставку |
@Override public double countPercent(int period) |
Высчитывает проценты по ипотечному счету |
Код
public class Mortgage extends Bank { public Mortgage(Client client, double balance, float percent) { super(client, balance, percent); } @Override public double countPercent(int period) { if(getClient() instanceof Entity){ return period <= 12 ? (getBalance()/200)*getPercent()*period : (getBalance()/200)*getPercent()*period + (getBalance()/200)*getPercent()*(period-12); } else{ return period <= 6 ? 0 : (getBalance()/200)*getPercent()*(period-6); } } }
Класс Client
Поля
private String name; |
Имя клиента |
private String adress; |
Адрес клиента |
Методы
public Client(String name, String adress) |
Конструктор, принимает имя и адрес клиента |
public String getName() |
Возвращает имя клиета |
public String getAdress() |
Возвращает адрес клиента |
public void setName(String name) |
Устанавливает имя клиента |
public void setAdress(String adress) |
Устанавливает адрес клиента |
Код
public class Client{ private String name; private String adress; public Client(String name, String adress) { this.name = name; this.adress = adress; } public String getName() { return name; } public String getAdress() { return adress; } public void setName(String name) { this.name = name; } public void setAdress(String adress) { this.adress = adress; } @Override public String toString() { return "Client{" + "name='" + name + '\'' + ", adress='" + adress + '\'' + '}'; } }
Класс Individual – наследник Client Код public class Individual extends Client { public Individual(String name, String adress) { super(name, adress); } }
|
Класс Entity – наследник Client Код public class Entity extends Client { public Entity(String name, String adress) { super(name, adress); } }
|
Задание 3
Класс Point3D
Поля
private int x |
Координата по x(Наследуется от суперкласса) |
private int y |
Координата по y(Наследуется от суперкласса) |
private int z |
Координата по z |
Методы
public Point3D() |
Конструктор, создает точку с координатами (0, 0, 0) |
public Point3D(int x, int y, int z) |
Конструктор, создает точку с координатами (x, y, z) |
public Point3D(Point3D p) |
Конструктор, создает точку с координатами переданной в него точки |
public int getZ() |
Возвращает точку z |
public void setZ(int z) |
Устанавливает точку z |
@Override public void setLocation(int x, int y) |
Изменяет координаты точки |
public void setLocation(int x, int y, int z) |
Изменяет координаты точки |
@Override public double distanceFromOrigin() |
Возвращает расстояние от точки начала координат до текущей точки |
public double distance(Point3D p) |
Возвращает расстояние от переданной точки до текущей точки |
public void translate(int dx, int dy, int dz) |
Сдвигает точку |
Код
public class Point3D extends Point { private int z; public Point3D() { this(0,0,0); } public Point3D(int x, int y, int z) { super(x, y); this.z = z; } public Point3D(Point3D p) { super(p.getX(), p.getY()); this.z = p.getZ(); } public int getZ() { return z; } public void setZ(int z) { this.z = z; } @Override public void setLocation(int x, int y) { super.setLocation(x, y); this.z = 0; } public void setLocation(int x, int y, int z){ setX(x); setY(y); this.z = z; } @Override public double distanceFromOrigin() { return distance(new Point3D()); } public double distance(Point3D p) { int dx = getX() - p.getX(); int dy = getY() - p.getY(); int dz = z - p.getZ(); return Math.sqrt(dx * dx + dy * dy + dz * dz); } public void translate(int dx, int dy, int dz) { setLocation(getX() + dx, getY() + dy, z + dz); } @Override public String toString() { return "Point3D{" + super.toString() + "z=" + z + '}'; } }
Выводы
В ходе выполнения лабораторной работы были изучены такие темы как: наследование, полиморфизм, переопределение методов.