面向對象
什麼是面向過程?:
面向過程的設計:
最小的程式單元是函數,每個函數負責完成某一個功能,用以接受輸入資料,函數對輸入資料進行處理,然後輸出結果資料.
整個軟體系統由一個個的函數組成,其中作為程式入口的函數稱之為主函數,主函數依次調用其他函數,普通函數之間可以互相調用,進而實作整個系統功能.
面向過程的設計,是采用指定而下的設計方式,在設計階段就需要考慮每一個子產品應該分解成哪些子子產品,每一個子子產品有細分為更小的子子產品,如此類推,直到将子產品細化為一個個函數.
存在的問題:
1.設計不夠直覺,與人類的習慣思維不一緻.
2.系統軟體适應性差,可拓展性差,維護性低.
面向過程最大的問題在于随着系統的膨脹,面向過程将無法應付,最終導緻系統的崩潰。為了解決這一種軟體危機,我們提出面向對象思想。
引出面向對象:
“面向對象”(英語:Object Oriented,簡稱OO)是一種以事物為中心的程式設計思想。
面向對象程式設計(英語:Object-oriented programming,縮寫:OOP),是一種程式開發的方法。它将對象作為程式的基本單元,将程式和資料封裝其中,以提高軟體的重用性、靈活性和擴充性。
面向對象時相對于面向過程而已的(c則是一個典型的面向過程的語言),站在面向對象的角度去看問題,你則是對象的動作的指揮者。如果站在面向過程的角度去看問題,你則是動作的執行者。
強調的是功能行為,面向過程”是一種以過程為中心的程式設計思想。“面向過程”他們不支援豐富的“面向對象”特性(比如繼承、多态),就是分析出解決問題所需要的步驟,然後用函數把這些步驟一步一步實作,使用的時候一個一個依次調用就可以了。面向過程在這一系列工作的執行中,強調的是工作的執行。
面向對象:一種基于面向過程的新的程式設計思想,顧名思義該思想是站在對象的角度思考問題,我們把多個功能合理的放到不同對象裡,強調的是具備某些功能的對象。
具備某種功能的實體,稱為對象
面向對象的三大特征:
封裝(encapsulation)
繼承(inheritance)
多态(polymorphism)
抽象
開發的過程:其實就是不斷的建立對象,使用對象,指揮對象做事情。
設計的過程:其實就是在管理和維護對象之間的關系.
例如:
吃飯
1:面向過程 1:自己動手做 2:買菜 3:洗菜 4:煮飯炒菜 5:很難吃,浪費時間 2:面向對象 1:找專業對象 2:餐館.點餐 3:餐館,做飯 4:飯好吃,節約時間,精力
局部變量和成員變量
成員變量:定義在類中的變量
局部變量 定義在方法中的變量
定義變量的文法:
資料類型 變量名 = 值;
變量的範圍 :
成員變量:成員變量在整個類中都有效
局部變量:隻在其中聲明的方法内有效
變量的初始值 :
成員變量: 它存儲在堆中,如果沒有賦初值
它有預設值:整數byte、short、int、long =0;
char=’\uoooo’ (表示空)
boolean =flase;
局部變量: 沒有初始值,是以必須先手動初始化才能使用.
變量的生命周期:
成員變量: 它屬于對象,它随着對象的建立而建立,随着對象的消失而消失
局部變量: 使用完馬上釋放空間。
什麼時候使用成員變量和局部變量?
1:考慮變量的生存時間,這會影響記憶體開銷。
2:擴大變量作用域,不利于提高程式的高内聚。
開發中應該盡量縮小變量的作用範圍,如此在記憶體中停留時間越短,性能也就更高。
不要動不動就使用static修飾,一般,定義工具方法的時候,static方法需要通路的變量,該變量屬于類,此時才使用static修飾字段.
也不要動不動就使用成員變量,因為存在着線程不安全問題,能使用局部變量盡量使用局部變量.
什麼是封裝?
1.把對象的狀态和行為看成一個統一的整體,将二者存放在一個獨立的子產品中(類);
2.“資訊隐藏”, 把不需要讓外界知道的資訊隐藏起來,盡可能隐藏對象功能實作細
節,向外暴露方法,保證外界安全通路功能; 使用private私有化,不準外界通路,把方法使用public修飾,允許外界通路.
封裝的好處
1:隐藏了類的具體實作,防止調用者随意修改系統屬性
2:提高元件的重用性.
3:提高對象資料的安全性
通路權限控制修飾符:
private: 表示私有的, 表示類通路權限. 隻能在本類中通路,離開本類之後,就不能直接通路.
不寫(預設):表示包私有,表示包通路權限. 通路者的包必須和目前定義類的包相同才能通路.
protected:表示子類通路權限,同包中的可以通路,即使不同包,但是有繼承關系,也可以通路.
public:表示全局的,可以公共通路權限,如某個字段/方法,使用了public修飾,則可以在目前項目中任何地方通路.
protected:一般,在繼承關系中,父類需要把一個方法隻暴露給子類.
class PersonDemo
{
public static void main(String[] args)
{
Person p1 = new Person();
p1.setAge(10);
p1.name = "abc";
System.out.println(p1.name);
System.out.println(p1.getAge());//擷取年齡
}
}
class Person
{
String name;
private int age; //私有化
public void setAge(int a)
{
if (a<0)
{
System.out.println("年齡不能為負數");
return;
}
age = a ;
}
public int getAge() //擷取年齡的方法
{
return age;
}
}
構造方法
構造方法的作用:
1):建立對象,凡是必須和 new 一起使用.
2):完成對象的初始化操作.
構造方法的特點:
1):構造方法的名稱和目前所在類的名稱相同.
2):禁止定義傳回類型,
3):在構造方法中,不需要使用return語句.其實構造方法是有傳回值的,傳回的是目前建立對象的引用.
構造方法注意的細節
1.當類中沒有定義構造函數時,系統會指定給該類加上一個空參數的構造函數。這個是類中預設的構造函數。當類中如果自定義了構造函數,這時預設的構造函數就沒有了。
2.在一個類中可以定義多個構造函數,以進行不同的初始化。多個構造函數存在于類中,是以重載的形式展現的。因為構造函數的名稱都相同。
public class PersonDemo
{
public static void main(String[] args)
{
Person p = new Person("person");
System.out.println(p.name);
}
}
class Person //建立人類
{
String name = null;//人的名稱
//自定義構造器
Person(){}//無參數的構造器
Person(String n)//有參數的構造器
{
name = n; //把n的值賦給name字段
}
}