15
回答
一个简单的面向对象小程序,有比这更好的设计吗?
华为云实践训练营,热门技术免费实践!>>>   

最近在学习面向对象:我找了了个问题:在控制台实现对一个人的体型得判断,我做了三部分处理:

首先是:person类,定义了基本属性

package com.cyjy.appraisals;
/**
 * person类,具有基本的人的属性,还可以判别人的健康状况
 * @author haoxiaocong
 *有姓名、性别、身高、体重四个属性
 *check()判别方法,中含有两个参数,身高和体重,返回值类型为string类型
 */
public class Person
{
 private String name;
 private char sex;
 private double height;
 private double weight;
 public Person(char sex,double height,double weight)
 {
  this.sex=sex;
  this.height=height;
  this.weight=weight;
 }
 public String getName() {
  return name;
 }
 public void setName(String name) {
  this.name = name;
 }
 public char getSex() {
  return sex;
 }
 public void setSex(char sex) {
  this.sex = sex;
 }
 public double getHeight() {
  return height;
 }
 public void setHeight(double height) {
  this.height = height;
 }
 public double getWeight() {
  return weight;
 }
 public void setWeight(double weight) {
  this.weight = weight;
 } 
}

接着是判断方法类用于判断体型优劣。


package com.cyjy.appraisals;
/**
 * 判断一个人的体型
 * @author haoxiaocong
 *
 */
public class IsFat
{
 public void  isFat(Person person)
 {
  double St_weight=0;
  if(person.getSex()=='男')
  {
   St_weight=(double)(person.getHeight()-105);
  }else
  {
   St_weight=(double)(person.getHeight()-100);
  }
  if(person.getWeight()>St_weight)
  {
   System.out.println("您的体型偏胖");
  }else if(person.getWeight()<St_weight)
  {
   System.out.println("您的体型偏瘦");
  }else
  {
   System.out.println("您的体型完美");
  }
 }
}
最后是检验类,主要为了在main中实现控制台输出:

package com.cyjy.appraisals;
/**
 * 用来测试某个人的体型
 * @author haoxiaocong
 *
 */
public class TestPerson
{
 public static void main(String[] args)
 {
  Person p1=new Person('男',178.5,73.5);
  IsFat i1=new IsFat();
  i1.isFat(p1);
 }
}

举报
共有15个答案 最后回答: 1年前
package com.cyjy.appraisals;
/**
 * person类,具有基本的人的属性
 * @author haoxiaocong
 *有姓名、性别、身高、体重四个属性
 */
public class Person 
{
	private String name;
	private char sex;
	private double height;
	private double weight;
	public Person(char sex,double height,double weight)
	{
		this.sex=sex;
		this.height=height;
		this.weight=weight;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public char getSex() {
		return sex;
	}
	public void setSex(char sex) {
		this.sex = sex;
	}
	public double getHeight() {
		return height;
	}
	public void setHeight(double height) {
		this.height = height;
	}
	public double getWeight() {
		return weight;
	}
	public void setWeight(double weight) {
		this.weight = weight;
	}	
}package com.cyjy.appraisals;
/**
 * 判断一个人的体型
 * @author haoxiaocong
 *
 */
public class IsFat 
{
 public void  isFat(Person person)
 {
  double St_weight=0;
  if(person.getSex()=='男')
  {
   St_weight=(double)(person.getHeight()-105);
  }else
  {
   St_weight=(double)(person.getHeight()-100);
  }
  if(person.getWeight()>St_weight)
  {
   System.out.println("您的体型偏胖");
  }else if(person.getWeight()<St_weight)
  {
   System.out.println("您的体型偏瘦");
  }else
  {
   System.out.println("您的体型完美");
  }
 }
}
package com.cyjy.appraisals;
/**
 * 用来测试某个人的体型
 * @author haoxiaocong
 *
 */
public class TestPerson 
{
 public static void main(String[] args) 
 {
  Person p1=new Person('男',178.5,73.5);
  IsFat i1=new IsFat();
  i1.isFat(p1);
 }
}


不要为了设计而设计,设计的最终目的是让代码更容易理解,更容易修改。 比如isfat我觉得放在另一个类中反而看着累,直接放到Person里,你的main里面只要一行代码就可以了。 new Person('男',178.5,73.5).isFat();
--- 共有 11 条评论 ---
飞天小猪猪回复 @乌龟壳 : 好吧,会看的 1年前 回复
楼雨回复 @maradona : 来个游戏的例子,比如怪物类、角色类、NPC类等。这样即好玩又不用为难了 1年前 回复
乌龟壳回复 @飞天小猪猪 : 或许你研究下@jfinal 的设计才能对我说的过度设计有些概念吧。 1年前 回复
飞天小猪猪回复 @乌龟壳 : hibernate是过度设计吗?mabaties才是过度设计吧? 1年前 回复
飞天小猪猪回复 @ericsoul : 那我不是放在person不是,不放在person类也不是 1年前 回复
设计的话不是很懂,但把isFat单独拿出来一个类来总是有点别扭,要不放到Person类里,要不就放到一个接口里,Person作为一个父类,子类实现接口~
--- 共有 2 条评论 ---
飞天小猪猪回复 @ericsoul : 不错,我有这个想法 1年前 回复
ericsoul虽然不是Javaer,但是第一把看到他的代码的时候,也觉得isfat应该是一个接口。 1年前 回复
单一职责原则
--- 共有 5 条评论 ---
xuqingkai回复 @飞天小猪猪 : 如果你把胖不胖当作一个人的属性,那就合适, 1年前 回复
飞天小猪猪回复 @徐清凯 : 我也不知道,感觉放在person类里不合适 1年前 回复
xuqingkai回复 @飞天小猪猪 : 问题的关键就是,isFat这个确实你person的一个方法,而不应该放在一个单独的对象里??试问什么对象是这个方法的载体??? 1年前 回复
ericsoul其实,还是那句话,不要为了设计而设计。设计模式是对场景的应用,而不是为了某个设计,而特意写一个代码。 1年前 回复
飞天小猪猪对的,我就是想把person作为一个单纯的实体类,功能单独一个工具类,test一个测试类 1年前 回复
你这个可不是面向对象哦,就那个“IsFat”就整蒙了,还有模型类一定要有一个全空的构造方法
--- 共有 3 条评论 ---
飞天小猪猪既然系统会默认一个全空的,为什麽还要再写一个呢 1年前 回复
飞天小猪猪我把判别方法封装起来再main入口直接调用不是面向对象吗?还有,模型类是指的person吧?不是会有一个默认的全控构造方法吗? 1年前 回复
飞天小猪猪为甚麽要有一个全空的呢? 1年前 回复
类的作用是为了输出对象,IsFat这个类不是具体事务的抽象,所以`不应该`使用一个类来完成你这个类的职责。
顶部