面向对象编程小例子解析

       在学习完UML概述之后,视频中讲了一些关于面向对象技术特点的介绍,而且在剩下的视频中将不再详细的叙述面向对象的知识,所以做个总结,通过视频中的一个小例子来加强对于面向对象技术中的封装、继承、多态、抽象、接口等概念的理解。 


例子(一)封装

   描述一个乐团,其中很多乐器,通过编写代码实现各种乐器的调音和演奏。

   先拿一个乐器小提琴为例:

   Class XiaoTiQin
    {
	Double price;  //属性  琴的价格
<span style="white-space:pre">	</span>Public void play() {system.out.println(“XiaoTiQin play”);}  //演奏方法  代码实现
<span style="white-space:pre">	</span>Public void tune() {system.out.println(“XiaoTiQin play”);}  //校准方法  代码实现
     }

    Public class Test
     {
<span style="white-space:pre">	</span>Public static void main(int ,string[])
  <span style="white-space:pre">	</span>{
     <span style="white-space:pre">		</span>XiaoTiQin s1=new XiaoTiQin();    //创建小提琴对象,
   <span style="white-space:pre">		</span>S1.tune();     //小提琴先调音
   <span style="white-space:pre">		</span>S1.play();
  <span style="white-space:pre">	</span>}
      }

该段代码定义了两个类,XiaoTiQin和Test,XiaoTiQin类定义了小提琴的价格属性和演奏以及校准方法,在Test类中创建小提琴对象s1,实现小提琴的调音和演奏的方法。程序执行后,main过程实现了s1对象的两个预期方法。

封装性

通过上面的例子将XiaoTiQin的价格属性以及演奏和校准方法写到XiaoTiQin类中,从而实现了外界只能通过将该类实例化成s1之后才能去调用访问price属性和play与tune方法,这就是面向对象技术中封装性的体现。

 

例子(二)、抽象+继承

如果乐团中除了小提琴还有小号、钢琴……(上百种乐器),而且要给所有的乐器加上商标的属性,在代码中如何实现?

方法一:在每种乐器的类中都加一条商标的代码即可实现,但是乐器有上百种,这样的话很容易漏加,而且程序员工作量会很大,该方法舍弃。

方法二:抓住小提琴、钢琴、小号的共性即都是乐器,便可以在这些类的基础上抽象出一个新的类“Instrument”:

  Abstract Class Instrument   //抽象类的定义方法
  {
      Double price;   //属性  琴的价格
      String brand;   //商标
      Public void play();    //演奏  只有方法的接口
      Public void tune();   //校准  
   }<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">    </span>

      注意,在抽象的父类中,方法一般只提供接口,具体实现要在子类中编写,这样定义之后,乐器的属性就可以直接继承了。

  Class XiaoTIqin extends Instrument  //继承父类时要加上extends
   {
<span style="white-space:pre">	</span>Public void play() {system.out.println(“XiaoTiQin play”);}  //演奏方法  接口的具体实现在类中编写//
<span style="white-space:pre">	</span>Public void tune() {system.out.println(“XiaoTiQin play”);}  //校准方法  代码实现
    }
      So,在主程序中仍以小提琴为例:

  Public class Test
  {
	Public static void main(int ,string[])
        {
   <span style="white-space:pre">	</span>    XiaoTiQin s1=new XiaoTiQin();    //创建小提琴对象,
   <span style="white-space:pre">	</span>    S1.tune();     //小提琴先调音
            S1.play();
	 }
    }
       这样就实现了在面向对象技术中的继承。

   即通过抽象出子类和父类,子类可以直接调用父类中的所有的属性和方法,这种机制就叫做继承。


例子(三)、多态

      拿小提琴、钢琴、小号来举例子,如何编写主程序从而实现演奏顺序的灵活性呢?

    此时需要在text类中多加一个方法yanzou。

  Public class Test
  {
<span style="white-space:pre">	</span>Public void yanzou(Instrument x)  //新加的方法
<span style="white-space:pre">	</span>{
<span style="white-space:pre">	</span>  x.play();
<span style="white-space:pre">	</span>}

	Public static void main(int ,string[])
<span style="white-space:pre">	</span>{<span style="white-space:pre">	</span>
 <span style="white-space:pre">	</span>  XiaoTiQin s1=new XiaoTiQin();    创建小提琴对象,
 <span style="white-space:pre">	</span>  GangQin s2=new GangQin();
 <span style="white-space:pre">	</span>  XiaoHao s3=new XiaoHao();
  <span style="white-space:pre">	</span>  S1.tune();     小提琴先调音
  <span style="white-space:pre">	</span>  S2.tune();
  <span style="white-space:pre">	</span>  S3.tune();
   
  <span style="white-space:pre">	</span>  Instrument ss1=new XiaoTiQin();
  <span style="white-space:pre">	</span>  Instrument ss2=new GangQin();
   <span style="white-space:pre">	</span>  Instrument ss3=new XiaoHao();
   
  <span style="white-space:pre">	</span>  While(乐谱结束)
<span style="white-space:pre">	</span>  {
   <span style="white-space:pre">	</span>     Instrument a=读取下一个演奏对象;
             a.play();   //
   <span style="white-space:pre">	</span>  }
         }
  }

    在这个例子中,通过创建一个yanzou的方法,以及创建三个乐器的实例ss1、ss2、ss3,利用一个判断的机制,当乐曲演奏结束则读取下一种乐器来进行演奏,a.play则实现了多态的体现,即给不同的对象传相同的激励,得到不同乐器演奏的响应,就是面向对象技术中多态的体现。

    通过这三个例子的讲解,让我对于面向对象中的封装、抽象、继承的概念又上深了一个层次,在UML接下来的学习中,我想也会遇到这种理念去画图并理解.


      
 





评论 24
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值