算法與數(shù)據(jù)結構共同構成了一個程序最基本的框架。
所以實現(xiàn)各種算法的時候,不可避免的要面對各種數(shù)據(jù)結構凳宙,而各種數(shù)據(jù)結構的具體實現(xiàn)当叭,又少不了面向對象(Object Oriented Programmin)茬故,即OOP。
不過面向對象到底是什么東西蚁鳖,又為什么要用到面向對象來編程磺芭,就涉及到面向對象的基本思想,這片文章暫且不對面向對象進行具體的展開醉箕,我們就來談一談钾腺,到底什么是類和對象。
對象
我們來舉個例子讥裤,一個班級進行了一次考試放棒,我們要統(tǒng)計學生的成績表。
每一個學生坞琴,都有自己的名字和成績哨查。那么每一個學生就是一個對象,這個對象包含了兩個屬性剧辐,分別是名字和成績。
// 比如我們有一個學生A
studentA;
// 學生A有自己的名字和成績兩個屬性
// 學生A名字叫"John"
studentA.name = "John";
// 學生A的成績是80分
studentA.score = 80;
所謂對象邮府,指的就是一個個具體的實例(Instance)荧关,比如這個例子中一個具體的學生就是一個對象。所以說褂傀,對象是實際忍啤、真實存在的東西。
每一個對象都是獨立的仙辟,區(qū)別于其他對象同波。即使有兩個學生的名字和成績都一模一樣,你也不能說這兩個學生就是同一個人叠国。
類
類是一種抽象的概念未檩,對于上面的例子,不管是學生A粟焊,B冤狡,C還是D,他們都屬于學生這個群體项棠,那么學生就是一個類悲雳。
class Student {
// 學生的名字
String name;
// 學生的成績
int score;
// 每一個新的學生對象被創(chuàng)建的時候,這個函數(shù)就會執(zhí)行
Student(String n, int s) {
// this關鍵字代表這個學生本身
this.name = n;
this.score = s;
}
}
以上就是學生這個類的結構香追,或者說學生類到底長的是什么樣子合瓢。
總而言之,類是一個抽象的描述透典,表現(xiàn)了擁有共同性質的某一類東西的結構晴楔。
而要創(chuàng)建一個類的實例(在Java里顿苇,用new 類名()
來創(chuàng)建一個新的對象)
Student A = new Student("John", 88);
像這樣,我們就創(chuàng)建了一個新的學生對象A滥崩,學生A名叫“John”岖圈,成績是88分。
總結
類只是描述了某類東西到底什么樣钙皮,而對象是這類東西一個個真實存在的實體蜂科。
題外
之前看到一個用python描述類與對象關系的評論,也是很有趣
class 類 (人)
instance 實例 (你,我,他)
你會有些屬性 (身高,年齡,體重)
你會有些技能 (吃飯,泡妞)
__init__
方法的主要作用,就是初始化你的屬性短条,這些屬性在上帝初始化你的時候就要賦予給你导匣,比如zhangsan = Person(170, 50, 29)
,這時上帝就把你創(chuàng)造出來了茸时,也就是實例化了你贡定。然后,你到底有哪些技能呢可都,這就看有沒有在類里面定義了缓待,如果有定義泡妞的技能,那么你就可以調用泡妞的技能來泡妞渠牲,大致就是這樣吧旋炒,看看下面的例子就更清楚了
class Person(object): # 這里就是初始化你將要創(chuàng)建的實例的屬性 def __init__(self, hight, weight, age): self.hight = hight self.weight = weight self.age = age # 定義你將要創(chuàng)建的實例所有用的技能 def paoniu(self): print('你擁有泡妞的技能') def eat(self): print('你可以吃') # 開始創(chuàng)建實例 zhangsan = Person(170, 50, 29) lisi = Person(175, 100, 30) # 你的實例開始使用它的技能 zhangsan.paoniu() lisi.eat() # 輸出結果 >>> 你擁有泡妞的技能 >>> 你可以吃
這個表述是不是很妙(笑