面向對象(OO)開發與面向過程(OP)開發的比較

最近剛剛開始學面向對象的開發,出於好奇,想比較一下面向對象開發與面向過程開發的區別,也是爲了執行本身關於寫技術博客的計劃。java

這是我在CSDN上的第一篇技術博客,也是我人生中的第一篇技術博客,所以我將盡量的詳細陳述,來做爲一個記念吧;編程

 

本文以實現一個簡單的用戶需求,製做一個能夠計算矩形和圓形周長以及面積的計算器爲度量標準,來比較面向過程開發和麪向對象開發的特色;安全

 

1.需求:模塊化

用戶輸入選項,選擇計算某個幾何圖形(本例中僅僅創建圓形和矩形兩個選擇)的周長和麪積,接着輸入該幾何圖形的的相關參數,獲得結果;測試

2面向過程的開發:this

2.1 設計思路:設計

1)所有代碼在main方法內執行;對象

2)使用switch case分支結構來實現不一樣圖形的計算;事件

3)考慮到是由用戶輸入變量,所以用到Scanner;開發

2.2 代碼以下:

//面向過程的開發

import java.util.Scanner;
public class RectangleCircleProcess {

    public static void main(String[] args) {
        Scanner var = new Scanner(System.in);
        System.out.println("請選擇(輸入數字便可)幾何圖形: 1.圓形 2.矩形");
        int graph = var.nextInt();
        switch(graph){
        case 1:
            System.out.println("請輸入半徑:");
            double r = var.nextDouble();
            double girth1 = 2 * (Math.PI) * r;
            double area1 =  (Math.PI) * r * r;
            System.out.println("該圓形的周長是:" + girth1 + "mm" + "\n"+ "該圓形的面積是:" + area1 + " mm^2");
            break;
        case 2:
            System.out.println("請輸入矩長:");
            double len = var.nextDouble();
            System.out.println("請輸入矩寬:");
            double wid = var.nextDouble();
            double girth2 = 2 * (len + wid);
            double area2 = len * wid;
            System.out.println("該矩形的周長是:" + girth2 + "mm" + "\n"+ "該矩形的面積是:" + area2 + " mm^2");
            break;
        default:
        }
    }
    
}

 

3.面向對象的開發:

3.1 設計思路:

1)同面向過程同樣,程序經過Scanner 控制檯輸入和switch case來實現用戶需求;

2)在測試類中建立object實現對不一樣圖形屬性的訪問,所以要爲每一個object封裝一個類來存儲該object的屬性和行爲(也就是變量和方法),所以須要新建兩個自定義類(分別是矩形和圓形);

3)關於新建類中的方法:

(1)考慮用構造方法來訪爲封裝類中的對象屬性(在此例中爲幾何圖形的物理參數),用方法來訪問封裝類中的對象行爲(在此例中行爲是計算面積和周長的公式);

(2)每一個類中的局部變量和成員變量命名相同,這樣是爲了練習規範寫法訪問變量;

(3)測試類中的main方法中調用新建類中的方法和構造方法;

 

3.3 代碼以下:

// 面向對象的開發

package oo.day02; //新建類 圓

public class Circle {
     double r;
    Circle(double r){
        this.r = r;
    }
    
    void calGirth(){
        double girth =  2 * (Math.PI) * r;
        System.out.println("該圓形的周長是:" + girth + " mm");
    }
    void calArea(){
        double area  =  (Math.PI) * r * r;
        System.out.println("該圓形的面積是:" + area + " mm^2");
    }
}

package oo.day02; //新建類 矩形

public class Rectangle {
     double len;
     double wid;
    Rectangle(double len, double wid){
        this.len = len;
        this.wid = wid;
    }
    
    void calGirth(){
        double girth = 2 * (len + wid);
        System.out.println("該矩形的周長是:" + girth + " mm");
    }
    void calArea(){
        double area  = len * wid;
        System.out.println("該矩形的面積是:" + area + " mm^2");
    }
}


package oo.day02; //  測試類(新建兩個對象 c 與 re 分別訪問 前述兩個新建類;)
import java.util.Scanner;
public class CircleRectangle {

        public static void main(String[] args) {
        Scanner var = new Scanner(System.in);
        System.out.println("請選擇(輸入數字便可)幾何圖形: 1.圓形 2.矩形");
        int graph = var.nextInt();
        switch(graph){
        case 1:
            System.out.println("請輸入半徑:");
            double r = var.nextDouble();
            Circle c = new Circle(r);
            c.calGirth();
            c.calArea();
            break;
        case 2:
            System.out.println("請輸入矩長:");
            double len = var.nextDouble();
            System.out.println("請輸入矩寬:");
            double wid = var.nextDouble();
            Rectangle re = new Rectangle(len, wid);
            re.calGirth();
            re.calArea();
            break;
        default:        
        }
    }
    
}

4. OO和OP 的比較;

4.1 代碼結構的大體比較

爲便於理解這一部分用漢字陳述;

1)OP:

class3

Scanner

switch

case1   方法1 方法2

case2   方法3  方法4

 

2)OO:

class1

方法1 方法2

class2

方法3 方法4

 

class3

Scanner

switch

case1  

建對象1

調用class1中的方法1 方法2

case2  

建對象2

調用class2中的方法3  方法4

 

4.2 特色分析:

1) OO模塊化設計思想

由代碼結構的比較能夠看出,OO是模塊化的拆分(封裝)設計並組裝實現功能;OP則是一體化的;

就上面例子而言,OO的代碼量多與OP,看起來彷佛還‘’繁瑣一些「;實際上換來的倒是結構更爲清晰,並且假若代碼兩巨大的話,按照OP的思路則更爲繁瑣,包括但不限於繁瑣的聲明變量,以及字符拼接;

2)便於維護和團隊協做

OO的新建類其餘人也能夠調用,可是若是OP設計,則只能是一我的使用,不利於團隊協做;

OO的突出優勢就是各個部分彼此獨立,互不影響,並且代碼結構清晰,避免了大量的代碼重複,這些都有利於代碼的維護,也許還有利於數據安全,OO爲大規模編程開發奠基了基礎。

拿 造汽車來講打比方,面向過程的製造思路就是隻有一個工廠,每一個構件都要作,再一臺車一臺車的逐輛製造,面向對象的製造思路就是,第1個廠專門造輪子,第2 個廠專門造座椅,第3個廠專門造發動機,第4個廠專門造玻璃,第5個廠負責總裝,生產整車第6個,7個一樣能夠總裝,所以在大規模製造上來講,OO的理念 更具有優點;

3)OO理念更符合人的思惟方式,引用伯特蘭.羅素在《西方哲學簡史》中的論述,進一步說,對象是把一堆事件集合到一塊兒的方式。咱們一提起Smith先生,就想到他的穿着、聲音、相貌等,若是沒有這些事件構成一個集合,Smith先生便什麼也不是了。

Everything is an object.

相關文章
相關標籤/搜索