You are on page 1of 8

Т Е Х Н И Ч Е С К И У Н И В Е Р С И Т Е Т– С О Ф И Я

КУРСОВ ПРОЕКТ

по Обектно-ориентирано програмиране

Студент: Петър Георгиев, факул. номер: 251220044, Факултет: ФИТ, Спец.:


КПТМ

Ръководител на курсов проект: В.Ганчева

София
2023
Shape2D
public abstract class Shape2D {
private String name;
private boolean hasColor;

public Shape2D(String name, boolean hasColor) {


this.name = name;
this.hasColor = hasColor;
}

public String getName() {


return name;
}

public boolean hasColor() {


return hasColor;
}

public abstract double perimeter();

public String toString() {


String color = hasColor ? " has color" : " has no color";
return name + color;
}
}
1. Класът е обозначен като abstract, тъй като ще има абстрактен метод.
2. name и hasColor са декларирани като private, за да не могат да бъдат достъпени

директно от други класове. Вместо това ще се използват методите за достъп,

които ще бъдат дефинирани.

3. Конструкторът приема два параметъра за инициализиране на полетата name

и hasColor.
4. getName() и hasColor() са методи за достъп до полетата name и hasColor съответно.

5. perimeter() е абстрактен метод, който ще бъде имплементиран в децата на този

клас. Тъй като всички 2D фигури имат периметър, този метод е деклариран

като абстрактен.
6. toString() е метод, който ще връща информация за фигурата. Той ще бъде

имплементиран в децата на този клас, но може да се използва и за тази

абстрактна класа, за да се върне информация за името и наличието на цвят

на фигурата.

RegularHexagon
public class RegularHexagon extends Shape2D {
private double sideLength;

public RegularHexagon(String name, boolean hasColor, double sideLength)


{
super(name, hasColor);
this.sideLength = sideLength;
}

public double getSideLength() {


return sideLength;
}

public void setSideLength(double sideLength) {


this.sideLength = sideLength;
}

@Override
public double perimeter() {
return 6 * sideLength;
}

public String toString() {


return super.toString() + ", side length = " + sideLength + ", perimeter =
" + perimeter();
}
}
1. RegularHexagon наследява Shape2D.

2. sideLength е поле за дължината на страната на правоъгълния шестоъгълник.

3. Конструкторът приема три параметъра за инициализиране на полетата name,

hasColor и sideLength. С помощта на ключовата дума super се извиква

конструкторът на родителя, който инициализира name и hasColor.


4. getSideLength() и setSideLength() са методи за достъп до полето sideLength.

5. perimeter() е предефиниран метод, който връща периметъра на

правоъгълния шестоъгълник.
6. toString() е предефиниран метод, който връща пълна информация за

правоъгълния шестоъгълник, като включва името, наличието на цвят,

дължината на страната и периметъра.


TestShape
import java.util.ArrayList;
import java.util.Collections;
import java.util.Scanner;

public class TestShape {


public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
ArrayList<RegularHexagon> hexagons = new ArrayList<>();

for (int i = 0; i < 6; i++) {


System.out.println("Enter the name of the hexagon:");
String name = scanner.nextLine();

boolean hasColor = false;


while (true) {
System.out.println("Does the hexagon have color? (y/n)");
String answer = scanner.nextLine();
if (answer.equalsIgnoreCase("y")) {
hasColor = true;
break;
} else if (answer.equalsIgnoreCase("n")) {
break;
}
}
double sideLength = 0;
while (sideLength <= 0) {
try {
System.out.println("Enter the length of the hexagon's side:");
sideLength = Double.parseDouble(scanner.nextLine());
} catch (NumberFormatException e) {
System.out.println("Invalid input. Please enter a positive
number.");
}
}

RegularHexagon hexagon = new RegularHexagon(name, hasColor,


sideLength);
hexagons.add(hexagon);
System.out.println("Hexagon added.");
}

System.out.println("Hexagons in ascending order by side length:");


Collections.sort(hexagons, (h1, h2) -> Double.compare(h1.getSideLength(),
h2.getSideLength()));
for (RegularHexagon hexagon : hexagons) {
System.out.println(hexagon);
}

System.out.println("Hexagons with color:");


for (RegularHexagon hexagon : hexagons) {
if (hexagon.hasColor()) {
1. В main() метода се създава празен списък от правоъгълни шестоъгълници, който ще

бъде попълнен по-късно.

2. С помощта на Scanner се четат от конзолата данни за 6 правоъгълни

шестоъгълника. В случай на невалидни данни се изписва грешка и се изисква

отново въвеждане на данните за същия правоъгълен шестоъгълник.

3. След като всички правоъгълни шестоъгълници са въведени и създадени, се извежда

информация за всички от тях.

4. Списъкът от правоъгълни шестоъгълници се сортира във възходящ ред по страна и

се извежда информацията за всички от тях.

5. Накрая се извежда информация за наличието на цвят за всеки правоъгълен

шестоъгълник.

You might also like