Intro | Guide | Shell | Draft |
---|
O objetivo desta atividade é implementar um sistema para gerenciar formas geométricas. Você precisará criar classes para representar pontos, círculos e retângulos.
- Descrição
- A interface
Shape
define métodos que todas as formas geométricas devem implementar. - A classe
Point2D
representa um ponto no plano bidimensional. - As classes
Circle
eRectangle
implementam a interfaceShape
e representam um círculo e um retângulo, respectivamente.
- A interface
A interface Shape
exige a implementação dos seguintes métodos (os métodos abaixo não são implementadas na classe Shape, apenas nas classes filhas):
getArea()
: Retorna a área da forma.getPerimeter()
: Retorna o perímetro da forma.getName()
: Retorna o nome da forma.
A classe Point2D
representa um ponto no plano bidimensional e possui:
- Atributos:
x
: coordenada x do ponto.y
: coordenada y do ponto.
- Métodos:
constructor(x: number, y: number)
: Inicializa os atributos x e y.toString()
: Retorna a representação do ponto no formato(x, y)
. Exemplo:(0.00, 0.00)
.
A classe Circle
implementa a interface Shape
e representa um círculo. Deve incluir:
- Atributos:
name
: Nome da forma, que é "Circ".center
: Centro do círculo, representado por umPoint2D
.radius
: Raio do círculo.
- Métodos:
constructor(center: Point2D, radius: number)
: Inicializa os atributos center e radius.getName()
: Retorna o nome "Circ".getArea()
: Calcula e retorna a área do círculo usando a fórmulaπ * raio²
.getPerimeter()
: Calcula e retorna o perímetro do círculo usando a fórmula2 * π * raio
.toString()
: Retorna uma string no formatoCirc: C=(x, y), R=radius
.
A classe Rectangle
também implementa a interface Shape
e representa um retângulo. Deve incluir:
- Atributos:
name
: Nome da forma, que é "Rect".p1
: Um vértice do retângulo (ponto superior esquerdo), representado por umPoint2D
.p2
: O vértice oposto do retângulo (ponto inferior direto), representado por umPoint2D
.
- Métodos:
constructor(p1: Point2D, p2: Point2D)
: Inicializa os atributos p1 e p2.getName()
: Retorna o nome "Rect".getArea()
: Calcula e retorna a área do retângulo usando a fórmulalargura * altura
.largura
é a diferença absoluta entrex
dep1
ep2
.altura
é a diferença absoluta entrey
dep1
ep2
.
getPerimeter()
: Calcula e retorna o perímetro do retângulo usando a fórmula2 * (largura + altura)
.toString()
: Retorna uma string no formato "Rect: P1=(x1, y1) P2=(x2, y2)".
- Crie um vetor de shapes para gerenciar.
- Nas ações
circle
erect
, instancie o objeto adequado e adicione-o ao vetor de shapes.
#TEST_CASE creating figures
$circle 2 3 5
#TEST_CASE showing
$show
Circ: C=(2.00, 3.00), R=5.00
#TEST_CASE creating more figures
$rect 1 1 3 3
$rect 2 4.53 5 10
$circle 1 1 1.5
#TEST_CASE showing all
$show
Circ: C=(2.00, 3.00), R=5.00
Rect: P1=(1.00, 1.00) P2=(3.00, 3.00)
Rect: P1=(2.00, 4.53) P2=(5.00, 10.00)
Circ: C=(1.00, 1.00), R=1.50
#TEST_CASE showing area and perimeter
$info
Circ: A=78.54 P=31.42
Rect: A=4.00 P=8.00
Rect: A=16.41 P=16.94
Circ: A=7.07 P=9.42
$end
- cpp
- java
- ts