面向對象和面向過程詳解
我們常說高級語言分為:面向過程和面向對象。
面向過程:c
面向對象:c++, Java
共同點:面向過程和面向對象都是解決實際問題的一種具體思路。
區別:
大家描述一下如下兩件事兒:
如何開汽車(事物比較簡單,可以用線性的思維去解決)
面向過程:1.采離合2. 掛檔3.踩油門,放離合4.開了
面向對象:
駕駛員
2. 汽車
駕駛員開汽車!Motor.start();
如何造汽車(事物比較復雜,使用簡單的線性思維無法解決)
面向過程:1. 造車輪 2. 造發動機 3. 造車皮4. 擋風玻璃 …
面向對象:
車輪
買橡膠
到馬來西亞
買飛機票
找到橡膠廠
掏錢買
用船將橡膠運到國內
造磨具
將橡膠放入磨具
出車輪
發動機
….
車殼
….
座椅
…
擋風玻璃
….
將上面的造出的東東,組裝,汽車造出!
對於描述復雜的事物,為了從宏觀上把握、從整體上合理分析,我們需要使用面向對象的思路來分析整個系統。但是,具體到微觀操作,可能需要面向過程的思路去處理。
解決簡單問題可以使用面向過程解決,解決復雜問題:宏觀上使用面向對象把握,細節處理上仍然使用面向過程
面向對象思考方式:遇到復雜問題,先從問題中找到名詞,然後確立這些名詞哪些可以作為類,再根據問題需求確定類的屬性和方法,確定類之間的關系
一 對象和類的概念
java中有一句名言,萬事萬物皆對象,對象指的是一個具體的事物
比如一個叫小明的人就是一個對象,而類是對對象的抽象
人類就是一個類,小明就是人類的一個實例也就是對象,人類中可能有其他人也就是其他實例,小李,小孫等等
把車作一個類的話,對象就是 我家的別克車,對象也可以是你家的瑪莎拉蒂車,對象就是具體的事物,而類就是對象的集合,所有對象的統稱
類可以看做是一個模版,或者圖紙,系統根據類的定義來造出對象
比如車類,模板就是有四個輪子,發動機,座位,可以跑
車類的一個對象可以是你家的車,就有四個輪子,發動機,也能跑,也能帶著你跑,車是你家的車,是一個實在的例子
類的定義
在java中類的定義方式是 class 類名
1 class Car{ 2 3 }
比如這個Car類
上面的Car類一片空白,可以定義屬性,有輪子,發動機,座位 可以定義跑的方法
class Car{ String name; int age; String color; String zuowei;
void run(){
System.out.println("我是汽車我能跑,還能帶人跑");
} }
上面定義了屬性,有車的名字,車齡,顏色,座位,還有個跑的方法
創建了類了,就該創建對象了,通過車類得到你家的車
類名 對象名 = new 類名()
class Car{ String name; int age; String color; String zuowei; void run(){ System.out.println("我是汽車我能跑,還能帶人跑"); } public static void main(String[] args){ Car car = new Car(); car.name="極品寶馬" car.age=3; car.color="黑色"; car.zuowei="真皮"; car.run(); } }
你家的車改名叫極品寶馬,已經3年的歷史了,黑色,被你改裝成了真皮沙發,還在跑
一般類中除了屬性和方法還包含構造器,也就是構造函數,可以在創建對象的時候直接給屬性賦值,相當於,直接給對象做個自我介紹
class Car{ String name; int age; String color; String zuowei; public Car(String name,int age,String color,String zuowei){ this.name=name; this.age=age; this.color=color; this.zuowei=zuowei; } void run(){ System.out.println("我是汽車我能跑,還能帶人跑"); } public static void main(String[] args){ Car car = new Car("極品寶馬",3,"黑色","真皮"); car.run(); } }
這和上面的效果是一樣的,如果在定義類的時候不創建構造器,系統會默認定義一個無參構造器
類中的屬性:[修飾符] 屬性類型 屬性名 = [默認值]
可以直接賦初始值,也可以不賦值,系統會默認初始值
屬性可以是基本數據類型,也可以是引用數據類型
類中的方法:定義該類的功能,比如吃飯,睡覺,打架這些動態的行為,可以這麼理解,屬性是名詞,方法是動詞,方法展現的是該類能干什麼事,有什麼行為
方法定義格式:
[修飾符] 方法返回值類型 方法名(形參列表) {
// n條語句
}
類和對象實例:
1 定義一個“點”(Point)類用來表示三維空間中的點(有三個坐標)。要求如下:
2 可以生成具有特定坐標的點對象。
3 提供可以設置三個坐標的方法。
4 提供可以計算該“點”距另外點距離平方的方法。
class Point { double x, y, z; public Point(double _x, double _y, double _z) { x = _x; y = _y; z = _z; } public double getDistance(Point p) {//傳參數,參數就是Point的一個對象
//計算兩點之間的距離 return Math.sqrt((x - p.x)*(x - p.x) + (y - p.y)*(y - p.y) + (z - p.z)*(z - p.z)); } } class Test { public static void main(String[] args) { Point p = new Point(5.0, 6.0, 7.8); Point origin = new Point(0.0, 0.0, 0.0);
//通過調用方法得到距離 System.out.println(p.getDistance(origin)); } }
結果