Introdução aos Objectos/Exercício 01: Gato simples: Difference between revisions

From Wiki**3

Root (talk | contribs)
No edit summary
Root (talk | contribs)
 
(11 intermediate revisions by the same user not shown)
Line 1: Line 1:
{{TOCright}}
== Problema ==
== Problema ==


Line 5: Line 6:
Um Gato tem como características o nome, a idade e o peso.
Um Gato tem como características o nome, a idade e o peso.


Implemente o método de comparação (equals), por forma a considerar que dois gatos são iguais se as suas características forem iguais.
Implemente o método de comparação ('''equals'''), por forma a considerar que dois gatos são iguais se as suas características forem iguais.


Implemente o método de apresentação (toString), por forma a produzir uma cadeia de caracteres onde seja apresentado o nome, a idade e o peso do gato.
Implemente o método de apresentação ('''toString'''), por forma a produzir uma cadeia de caracteres onde seja apresentado o nome, a idade e o peso do gato.


Implemente métodos de acesso às variáveis internas do gato.
Implemente métodos de acesso às variáveis internas do gato.


Implemente um programa ("main") que ilustre a utilização dos métodos anteriores.
Implemente um programa ('''main''') que ilustre a utilização dos métodos anteriores.


== Solução ==
== Solução: diagrama de classes UML ==


=== Class "Cat" ===
== Solução: código Java ==


<java5>
{{CollapsedCode|Ficheiro '''Cat.java'''|
<source lang="java">
public class Cat {
public class Cat {


/**
/** The cat's name. */
* The cat's name.
private String name;
*/
private String _name;


/**
/** The cat's age. */
* The cat's age.
private int age;
*/
private int _age;


/**
/** The cat's weight. */
* The cat's weight.
private double weight;
*/
private double _weight;


/**
/**
Line 43: Line 39:
*/
*/
public Cat(String name, int age, double weight) {
public Cat(String name, int age, double weight) {
_name = name;
this.name = name;
_age = age;
this.age = age;
_weight = weight;
this.weight = weight;
}
}


/**
/**
* @return the _name
* @return the name
*/
*/
public String getName() {
public String getName() {
return _name;
return this.name;
}
}


Line 58: Line 54:
* @param name the name to set
* @param name the name to set
*/
*/
public void set_name(String name) {
public void setName(String name) {
_name = name;
this.name = name;
}
}


Line 66: Line 62:
*/
*/
public int getAge() {
public int getAge() {
return _age;
return this.age;
}
}


Line 72: Line 68:
* @param age the age to set
* @param age the age to set
*/
*/
public void set_age(int age) {
public void setAge(int age) {
_age = age;
this.age = age;
}
}


Line 80: Line 76:
*/
*/
public double getWeight() {
public double getWeight() {
return _weight;
return this.weight;
}
}


Line 86: Line 82:
* @param weight the weight to set
* @param weight the weight to set
*/
*/
public void set_weight(double weight) {
public void setWeight(double weight) {
_weight = weight;
this.weight = weight;
}
}


/**
/** @see java.lang.Object#equals(java.lang.Object) */
* @see java.lang.Object#equals(java.lang.Object)
*/
@Override
@Override
public boolean equals(Object o) {
public boolean equals(Object o) {
if (o instanceof Cat) {
if (o instanceof Cat) {
Cat cat = (Cat) o;
Cat cat = (Cat) o;
return _name.equals(cat.getName()) && _age == cat.getAge() && _weight == cat.getWeight();
return this.name.equals(cat.name) && this.age == cat.age && this.weight == cat.weight;
}
}
return false;
return false;
}
}


/**
/** @see java.lang.Object#toString() */
* @see java.lang.Object#toString()
*/
@Override
@Override
@SuppressWarnings("nls")
public String toString() {
public String toString() {
return _name + " (cat) (" + _name + ":" + _age + ":" + _weight + ")";
return this.name + " (cat) (" + this.age + ":" + this.weight + ")";
}
}
}
}
</java5>
</source>
}}
 
=== Aplicação de Teste (main) ===


=== Test application (main) ===
Embora, neste caso, apenas interesse a definição de '''main''', é necessária a definição da class '''Application''', pois em Java não é possível definir funções fora de classes.


<java5>
{{CollapsedCode|Ficheiro '''Application.java'''|
<source lang="java">
public class Application {
public class Application {
public static void main(String[] args) {
public static void main(String[] args) {
Cat cat = new Cat("Tareco", 12, 3.1415);
Cat cat = new Cat("Tareco", 12, 3.141);
System.out.println(cat.equals(new Cat("Tareco", 12, 3.141)));  // prints "true"
System.out.println(cat.equals(new Cat("Tareco", 12, 3.141)));  // prints "true"
System.out.println(cat.equals(new Cat("Pantufa", 1, 2.718)));  // prints "false"
System.out.println(cat.equals(new Cat("Pantufa", 1, 2.718)));  // prints "false"
Line 124: Line 119:
}
}
}
}
</java5>
</source>
}}


[[category:Ensino]]
[[category:Ensino]]
[[category:PO]]
[[category:PO]]
[[category:PO Exemplos]]

Latest revision as of 01:01, 12 December 2020

Problema

Modele e implemente uma classe que represente uma versão muito simples do conceito Gato.

Um Gato tem como características o nome, a idade e o peso.

Implemente o método de comparação (equals), por forma a considerar que dois gatos são iguais se as suas características forem iguais.

Implemente o método de apresentação (toString), por forma a produzir uma cadeia de caracteres onde seja apresentado o nome, a idade e o peso do gato.

Implemente métodos de acesso às variáveis internas do gato.

Implemente um programa (main) que ilustre a utilização dos métodos anteriores.

Solução: diagrama de classes UML

Solução: código Java

'Ficheiro Cat.java'
public class Cat {

	/** The cat's name. */
	private String name;

	/** The cat's age. */
	private int age;

	/** The cat's weight. */
	private double weight;

	/**
	 * Fully specify the cat's initial state.
	 * 
	 * @param name
	 * @param age
	 * @param weight
	 */
	public Cat(String name, int age, double weight) {
		this.name = name;
		this.age = age;
		this.weight = weight;
	}

	/**
	 * @return the name
	 */
	public String getName() {
		return this.name;
	}

	/**
	 * @param name the name to set
	 */
	public void setName(String name) {
		this.name = name;
	}

	/**
	 * @return the age
	 */
	public int getAge() {
		return this.age;
	}

	/**
	 * @param age the age to set
	 */
	public void setAge(int age) {
		this.age = age;
	}

	/**
	 * @return the weight
	 */
	public double getWeight() {
		return this.weight;
	}

	/**
	 * @param weight the weight to set
	 */
	public void setWeight(double weight) {
		this.weight = weight;
	}

	/** @see java.lang.Object#equals(java.lang.Object) */
	@Override
	public boolean equals(Object o) {
		if (o instanceof Cat) {
			Cat cat = (Cat) o;
			return this.name.equals(cat.name) && this.age == cat.age && this.weight == cat.weight;
		}
		return false;
	}

	/** @see java.lang.Object#toString() */
	@Override
	public String toString() {
		return this.name + " (cat) (" + this.age + ":" + this.weight + ")";
	}
}

Aplicação de Teste (main)

Embora, neste caso, apenas interesse a definição de main, é necessária a definição da class Application, pois em Java não é possível definir funções fora de classes.

'Ficheiro Application.java'
public class Application {
	public static void main(String[] args) {
		Cat cat = new Cat("Tareco", 12, 3.141);
		System.out.println(cat.equals(new Cat("Tareco", 12, 3.141)));  // prints "true"
		System.out.println(cat.equals(new Cat("Pantufa", 1, 2.718)));  // prints "false"
		System.out.println(cat);
	}
}