Defina uma classe que representa um círculo com métodos privados que calcula a área, a distância entre os centros de dois círculos, e a circunferência do círculo.
O círculo deve ser iniciado no momento que for instanciado por um conjunto de construtores:
Passo 1
E aí pessoal, vamos lá?!
Essa é claramente uma questão de sobrecarga de construtor!
A questão está pedindo pra gente criar uma classe que possui três métodos privados e um construtor com 3 sobrecargas.
Vamos começar desenvolvendo o cabeçalho da questão. Nessa questão vamos precisar calcular áreas, distancias e perímetros, então vamos incluir o cabeçalho pra auxiliar a gente.
Passo 2
Então vamos começar declarando a classe
Vamos precisar declarar três atributos: e para representar a posição central, e o para representar o raio do círculo. Além disso, ao longo dos métodos vamos precisar do valor de , então vamos declarar uma constante com o valor.
Depois vamos precisar declarar métodos privados que calcula a área do círculo, calcular a distância entre os centros de dois círculos, e a circunferência do círculo. Vamos declarar então três métodos: , e . Por enquanto vamos apenas declarar os protótipos dos métodos, a gente vai desenvolver eles depois.
Continuando a nossa classe, vamos desenvolver os construtores. Lembre-se os construtores são sempre públicos (com raras exceções). Então vamos mudar para e criar o construtor.
Nessa questão, temos sobrecarga de construtores então vamos declarar todas as sobrecargas do nosso construtor. A primeira versão não recebe nenhum parâmetro
A segunda versão do construtor irá receber o valor do raio:
A terceira versão recebe o valor da posição e
E a última versão do construtor recebe os três parâmetros:
Está quase tudo pronto, mas tem um pequeno detalhe. Todos os atributos e métodos interessantes são privados! Precisamos criar um método público que imprima as informações dessa classe. Então vamos criar o método :
E agora sim a gente pode fechar a classe.
Passo 3
Dentro da classe a gente declarou o protótipo dos métodos, agora a gente precisa desenvolver o conteúdo desses métodos. Para desenvolver um método fora da classe a gente chama o método usando e dentro das chaves escreve o conteúdo do método.
Primeiro, vamos começar pelo método . Ele é bem simples, não precisa receber nenhum parâmetro. Apenas vai acessar o atributo e aplicar a fórmula da área do círculo:
Depois vamos desenvolver o método . Esse método é interessante por recebe um outro objeto da classe ! Dentro desse método, a gente calcula a distancia entre as componentes do círculo, e depois calcula o módulo dessa distância, e retorna esse resultado:
No código fica assim:
O próximo método que vamos desenvolver é o que calcula o comprimento da circunferência usando a seguinte fórmula:
E já vamos aproveitar para desenvolver o método também. É só usar o várias vezes para imprimir os atributos e métodos da classe:
Passo 4
Agora vamos desenvolver os construtores. Vamos lembrar que um construtor é um método sem tipo e que não retorna nada. Na maioria das vezes esse método é usado apenas para inicializar os atributos da classe, e é exatamente isso que faremos aqui.
Para evitar confusão entre os nomes dos parâmetros e dos atributos, vamos usar o ponteiro quando a gente quiser se referir aos atributos da classe.
O primeiro construtor não recebe nenhum parâmetro, e inicializa os atributos com valores padronizados.
O segundo construtor recebe o valor do raio, e inicializar os atributos:
O construtor três recebe os parâmetros e :
E o último construtor recebe o valor de todos os parâmetros da classe:
E prontinho! Desenvolvemos todas as sobrecargas do construtor, e a classe está terminada!
Passo 5
Pra terminar a questão, precisamos testar o nosso código!
Vamos criar quatro instâncias da classe círculo, e em cada uma delas a gente vai utilizar uma construtor diferente!
E depois, em cada instância vamos utilizar o método :
E aí termos o seguinte resultado: