[零基础学JAVA]Java SE面向对象部分-10.面向对象基础(05)

上季内容回顾:
1、类和对象
2、引用的内存分配
3、封装性
4、构造方法
5、String类
6、this关键字
在编写代码之前建立好应该具备的类,之后再为类添加一些属性,属性都是需要被封装的,封装之后必须写setter和getter方法才可以访问属性,如果有需要则可以加入构造方法设置属性。
本季主要知识点:
1、 题目讲解
2、 如何去分析题目
本次课程是习题课程,将之前所学到的各种知识综合应用在题目之中, 并进行综合讲解,在讲解的时候为读者提供了解决问题的基本思路。
image
分析下这个题目哈~
我们最好先画下类图
类名
属性
方法
属性的表示:
权限 属性名称:类型
-name:String ==> private String name ;
方法的表示:
权限 方法名称(参数名称:参数类型,参数名称:参数类型):返回值类型
+setName(name:String):void ==> public void setName(String name)
用手工画类图会非常麻烦哈,我们可以使用jude这样的工具。
JUDE(Java and UML Developers Environment) 1.2.1
image
在这里,我们新建三个类:Student,Class_,Out
image
类我们定义好了后,我们再来定义下类滴属性哈,先Student类定义name、age、score属性。
image
属性定义后我们就定义其setter和getter方法并设置其参数。
image
依此类推
image
然后是班级Class类定义name、de.ion两个属性。
image
同样设置其setter和getter方法并设置参数。
image
最后是输出类Out,这个非常简单,只要定义一个print方法就可以了。
image
最后一张完整的类图就出来了哈~
image
在这个工具中,可以根据图形生成代码,我们看下面哈~
选择文件----导出Java
image
选择存放的路径
image
image
image
现在目录中就生成了这三个类文件
image
我们把它们合并到一个文件中,这样直观一点哈~
image
验证下效果哈~
image
修改代码为其加入构造方法
class Student {
   private String name;
   private int age;
   private float score;
   //修改程序,加入一个构造
   public Student(){}
   public Student(String name, int age, float score){
     this.setName(name) ;
     this.setAge(age) ;
     this.setScore(score) ;
  }
   public void setName(String name) {
     this.name = name ;
  }
   public String getName() {
     return this.name ;
  }
   public void setAge( int age) {
     this.age = age ;
  }
   public int getAge() {
     return this.age ;
  }
   public void setScore( float score) {
     this.score = score ;
  }
   public float getScore() {
     return this.score ;
  }
}
class Class_ {
   private String name;
   private String de.ion;
   public Class_(){}
   public Class_(String name,String de.ion){
     this.setName(name) ;
     this.setDe.ion(de.ion) ;
  }
   public void setName(String name) {
     this.name = name ;
  }
   public String getName() {
     return this.name ;
  }
   public void setDe.ion(String de.ion) {
     this.de.ion = de.ion ;
  }
   public String getDe.ion() {
     return this.de.ion ;
  }
}
class Out {
   public void print(Student stu, Class_ cla) {
    System.out.println( "学生姓名:"+stu.getName()) ;
    System.out.println( "学生年龄:"+stu.getAge()) ;
    System.out.println( "学生成绩:"+stu.getScore()) ;
    System.out.println( "班级名称:"+cla.getName()) ;
    System.out.println( "班级描述:"+cla.getDe.ion()) ;
  }
}
public class Demo02
{
   public static void main(String args[]){
    Student s = new Student() ;
    s.setName( "王乾") ;
    s.setAge(27) ;
    s.setScore(99.9f) ;
    Class_ c = new Class_() ;
    c.setName( "JAVA强化班") ;
    c.setDe.ion( "学习JAVA技术强化班") ;
     new Out().print(s,c) ;
  }
}
 
加入构造方法后效果怎么样呢?验证一下哈~
image
程序我们已经修改了,我们可以将程序代码导入到工具之中,自动生成类图。
首先我们新建一个文件
image
然后选择导入Java
image
找到Java程序的路径
image
单击start
image
image
image
如果属性是两个单词的,则第一个单词的首字母小写,之后每个单词的首字母大写。
/*
1、定义好要使用的类
2、定义好类中的属性
3、为属性封装
4、为封装后的属性设置setter和getter方法
5、如果需要可以为类中添加构造方法
6、为类中添加所需要的其他方法
*/

class Student
{
   //学生编号
   private String stuno ;
   //学生姓名
   private String name ;
   //数学成绩
   private float mathScore ;
   //英语成绩
   private float englishScore ;
   //计算机成绩
   private float computerScore ;

   public Student(){}
   public Student(String stuno,String name, float mathScore, float englishScore, float computerScore){
         this.setStuno(stuno) ;
     this.setName(name) ;
     this.setMathScore(mathScore) ;
     this.setEnglishScore(englishScore) ;
     this.setComputerScore(computerScore) ;
  }

   public void setStuno(String stuno){
     this.stuno = stuno ;
  }
   public void setName(String name){
     this.name = name ;
  }
   public void setMathScore( float mathScore)
  {
     this.mathScore = mathScore ;
  }
   public void setEnglishScore( float englishScore)
  {
     this.englishScore = englishScore ;
  }
   public void setComputerScore( float computerScore)
  {
     this.computerScore = computerScore ;
  }
   public String getStuno(){
     return this.stuno ;
  }
   public String getName(){
         return this.name ;
  }
   public float getMathScore(){
         return this.mathScore ;
  }
   public float getEnglishScore(){
         return this.englishScore ;
  }
   public float getComputerScore(){
         return this.computerScore ;
  }
   //添加所需要的其他方法
   // 在编写类的时候一定要记住一个原则:任何的输出绝对不能在类中完成
   // 所有要输出的内容在类中只是把值返回来,交给调用处输出
   // 取得全部成绩的总和
   public float getSum(){
         return this.mathScore+ this.englishScore+ this.computerScore ;
  }
   //取得平均成绩
   public float getAvg(){
         return this.getSum() / 3 ;
  }
   //取最高的成绩
   public float getMax(){
         //三个成绩相比
     float max = 0.0f ;
     if ( this.mathScore> this.englishScore)
    {
      max = this.mathScore ;
    }
     else
    {
      max = this.englishScore ;
    }
     if (max< this.computerScore)
    {
      max = this.computerScore ;
    }
     return max ;
  }
   //取最低的成绩
   public float getMin(){
         //三个成绩相比
     float min = 0.0f ;
     if ( this.mathScore> this.englishScore)
    {
      min = this.englishScore ;
    }
     else
    {
      min = this.mathScore ;
    }
     if (min> this.computerScore)
    {
      min = this.computerScore ;
    }
     return min ;
  }
}
public class Demo03{
   public static void main(String args[]){
    Student s = new Student() ;
    s.setStuno( "s01") ;
    s.setName( "王乾") ;
    s.setMathScore(89.8f) ;
    s.setEnglishScore(99.0f) ;
    s.setComputerScore(88.8f) ;
    System.out.println(s.getName()+ "的成绩单("+s.getStuno()+ "):") ;
    System.out.println( "\t|- 总成绩:"+s.getSum()) ;
    System.out.println( "\t|- 平均成绩:"+s.getAvg()) ;
    System.out.println( "\t|- 最高成绩:"+s.getMax()) ;
    System.out.println( "\t|- 最低成绩:"+s.getMin()) ;
  }
};
 
测试下效果
image
一般来说分析面向对象程序的步骤:
1、可以画一些类的草图
2、之后定义每个类中的属性,属性定义完之后必须封装
3、封装的属性如果需要被外部所访问,则肯定必须写setter和getter
4、如果需要在对象实例化时可以为其属性赋初始值,则可以加入构造方法,如果有必要则可以加入多个构造(一个是无参的,其他的是有参的)
5、为类中添加程序所必须的方法
6、进行测试
记住:
开发中main 方法就是一个测试端,只在里面写少量的代码即可,不可多写,也可以把main 方法称为客户端。

总结
通过这一季的习题练习哈,我们一定要培养面向对象的解决的思路起来哈~~~
#########################################################################
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值