软考--面向对象

来源:互联网 发布:中国电子商务发展数据 编辑:程序博客网 时间:2024/06/05 16:20

背景

今年开始软考的时间有点晚了,从报了名之后软考算是正式开始了,放下了其他的东西,全面开始软考(中级)模式。

听Mr.mi和考过的人说,软考就是对过去几年学习的总结和复习,它是一个分水岭,过了这一关,那么今后的学习会有不一样的感受。

面向对象思想在刚开始学习VB6.0时候就接触过,只是它并不完全是面向对象程序语言,后来接触的C++、C#、设计模式等知识的时候才有一个大概的了解。软考里面设计模式使用的语言是java语言,以前没有接触过,但是它的基础知识和C和vb很像。所以之后有些知识点是在java语言基础上的。(J2SE)

概况

处有一个面向对象的导图

发展史

面向过程:

以方法进行编程。完成功能都是以一个一个步骤拼接起来的。

面向对象:

比面向过程更加抽象,和复用性更好。它以一个对象为基本进行调用

1、对象、类

2、方法、属性

3、关系

面向组件

这是比对象更加的抽象(二进制级别)

            面向服务

其实和面向组件一样,它们还是利用面向对象的思想,只不过对对象进行了更深层次的抽象。

Java和面向对象

java中也是类和对象为单位,声明类,然后供其它的类调用。类和类之间的关系分为4种,分别是关联关系、继承关系、聚合/组合关系、实现关系。

        

关联关系

关系最弱,比如调用:一个类的方法,参数是另一个类的对象名

继承关系

可以读为XX是一种XX,比如小猫是一种动物。

整体和部分关系

有组合和聚合两种关系,前者是紧耦合关系,后者是松耦合关系

实现关系

接口和实现接口的类的关系

          
使用面向对象

我们有面向对象的思想,就是为了在软件设计中应用这个思想,为我们节省时间、减少麻烦,使软件复用性强。        

Public class TestStack{  Publc static void main(String[] args){<span style="font-family: Arial, Helvetica, sans-serif;">    </span>    Test test =new Test();    int date 9;    BirthDate d1=new BirthDate(1,1,2000);    BirthDate d2=new BirthDate(7,7,1970);    test.change1(date);    test.change2(d1);    test.change3(d2);<p style="margin:0in;font-family:SimSun;font-size:10.5pt" lang="en-US">     System.out.println("date="+date);</p><p style="margin:0in;font-family:SimSun;font-size:10.5pt" lang="en-US">     d1.display();</p><p style="margin:0in;font-family:SimSun;font-size:10.5pt" lang="en-US">     d2.display();</p>  }  Public void change1(int i){    i=1234;  }  Public void change2(BirthDate b){    b=new BirthDate(22,3,2015);  }  Public void change3(BirthDate b){    b.setday(22);  }}

代码执行前在内存的状态:

          

执行后在内存中的状态:

这个过程中,栈中产生过变量i、b;堆产生过b所指向的对象。

        方法调用完毕以后,为这个方法分配的局部变量自动消失;

        方法也会消失。这个方法指向的内存中的对象如果没有指针指向就会消失(垃圾回收)


对象中的方法使用:


在学习使用方法有几个特殊的关键字要学习,this关键字,super(),Static关键字,package中的jar包和关键字import。final关键字等。

1、this关键字

通过自身引用,this可以处理成员变量和参数重名的问题;this相对的有一个super方法:它指父类。

public class DemoThis{   private String name;   private int age;   DemoThis(String name,int age){    setName(name);   //你可以加上this来调用方法,像这样:this.setName(name);但这并不是必须的    setAge(age);    this.print(); br> }     public void setName(String name){    this.name=name;//此处必须指明你要引用成员变量   }   public void etAge(int age){    this.age=age;   }   public void print(){    System.out.println("Name="+name+" ge="+age);  //在此行中并不需要用this,因为没有会导致混淆的东西   }   public static void main(String[] args){    DemoThis dt=new DemoThis("Kevin","22");  这段代码很简单,不用解释你也应该能看明白。在构造函数中你看到用this.print(),你完全可以用print()来代替它,两者效果一样。下面我们修改这个程序,来演示super的用法。  class Person{   public int c;   private String name;   private int age;   protected void setName(String name){    this.name=name;   }   protected void setAge(int age){    this.age=age;  }   protected void print(){    System.out.println("Name="+name+" Age="+age);   }  }  public class DemoSuper extends Person{   public void print(){    System.out.println("DemoSuper:");    super.print();   }   public static void main(String[] args){    DemoSuper ds=new DemoSuper();    ds.setName("kevin");    ds.setAge(22);    ds.print();   }  }  


         

2、static关键字

static声明的是静态成员变量,它在内存中被分配到data segment区中,在调用该方法时,不会将对象的引用传递给它,所以在static方法中不可访问非static的成员。


3、package和import

现在即使有类的一些命名规则,但是仍然会出现类名冲突的情况,使用包就可以解决这个问题。在安装文件加下jre/lib下有很多.jar文件,其中rt.jar中打包类很多我们需要用到的类。

以下是我们主要会用到的类:

Java.lang

核心

StringMathIntegerSystemThread,提供常用功能

Java.awt

 

包含构成抽象窗口工具集的多个类,这些类被用来构建和管理应用程序的图形用户界面

Java.applet

不流行

小应用程序

Java.net

 

与网络相关的操作的类

Java.io

 

输入、输出功能的类

Java.util

 

包含一些实用工具,如定义系统特性、实用与日期日历相关的函数


如果引用包里的文件,可以使用import


上面这种麻烦而且容易写错。

使用import java.io.*;//*号代表引用全部

总的来说:

a、将类放到包里,就要在源文件第一行加package

b、必须保证该类的class文件位于正确目录下

该类的源码可能会产生影响,可以删除或移动

c、其他类访问jar包中的类

写全名:com.tgb.426.Xulingbo

引入import

*具体类名

访问位于同一包中的类不需要引入。

dClass文件父文件在Classpath下。



       总结:这只是面向对象思想的一些特别基础的东西,熟练使用在以后的设计模式和程序设计会有很多的帮助。在面向对象的程序设计中,构造方法是我经常会混淆的概念,在接下来的学习过程中,深入体会吧!

1 0
原创粉丝点击