Java學習筆記--關於物件導向的思考,java學習筆記
1.不可改變的類產生對象以及變數的範圍
2. 關鍵詞this的使用
3.用類抽象的思想製作軟體
4.通過關聯式模式建立類
5.使用物件導向的範例來設計程式,遵循類設計指導。
已經學習了:怎麼定義類已經建立對象,還有就是通過Java API 來使用類。
1.不可變的類和對象
正常來說,我們使用類的時候都是為了產生一個對象,允許在以後更改對象的內容,但是有時候會要求不能改變他的內容。比如我們記錄學生檔案的時候,又或者是個人簡曆的時候,有些檔案比如出生日期,一旦是確定的不會去更改,但是學曆,工作經驗會隨著個人的成長而改變。Java中也有一些類是不會變的,前面提到String類,裡面的內容一般是會變的,改變的時候參考這個值的String 變數所指向的字串。只需要將資料區私人,然後在公用的方法上不能夠更改這些資訊,就實現了我們的目標。在類裡面資料區的變數只能聲明一次,但是在方法中的不同程式塊變數可以聲明很多次。
例子
public class circle{ private int x = 0; private int y = 0; public circle(){} public void p(){ int x = 1; system.out.println("x = " +x); system.out.println("y = " +y); } }
此時對比x和y的輸出的值,可以發現在p方法中的x的值已經改變,但是y的值沒有改變,也就是後來在方法中 定義的x ,他的範圍就在方法p中。為了避免混淆犯錯,不要在方法裡面使用本地變數或者是靜態變數,除了是用方法來傳遞參數的位置。
2. 關鍵詞this的使用
關鍵詞this的使用,this是一個參考的名稱,它指向的是喚醒這個對象的它本身,最直接的就是用來參考類本身的隱藏資料區。
public class Circle{ int x = 10; static double k = 11; void setX(int x){ this.x = x; } static void setK(double k){ Circle.k= k; }}
通過關鍵詞this可以得到對象,然後喚起執行個體,this.x = x就是要讓參數的x賦值到喚起的對象的資料區,如果說將this的用法改成 this(abc),也就可以理解為這個類的構造方法。
3.用類抽象的思想製作軟體
類的抽象和封裝。類的抽象就是使用類,並且實作類別之中的一部分內容,建立這個類必須要讓使用者知道它是如何使用的,方法和資料可以從外部和類中的到。類的實現的思想,對於客戶機而言,類就像一個黑盒,使用的時候將這些抽象出來,然後得到方法和內容的簽名。用戶端通過抽象類別來使用。生活中將電腦細分為很多部分,CPU,記憶體,硬碟,主板。每個部分都是一個對象,每個部分都有屬性和方法,為了整合起一整台電腦,我們必須要知道每個部分是怎麼使用的,以及它們之間是如何互動,內部的東西已經封裝起來了,我們不必去瞭解每個觸發器,鎖存器是怎麼工作的,只需瞭解整體的模組功能。
也就是說 1 開發類和使用類是兩種獨立的任務
2 可以跳過複雜的類來,然後學習整個工程
3 通過使用類可以更好地知道怎麼來實現
物件導向的思想:
public static double gerBMI(double weight, double height)
這個方法,可以計算我們身體的BMI值,然後還是很有限,因為的到這些資訊以後,我們日常使用時,作為某個人身體情況的衡量指標,這些資訊就要和這個人的其他資訊串連起來,此時可以按照以下的例子建立類:
String name;int age;double weight;double height;BMI(name: String , age: int ,weight:double, height: double)getBMI
對象也可以包含另外一個對象,就像上面一個BMI的例子中寫的一樣,在BMI中就有關於String類產生的字串,類之間的關係也有很多種,比如以下三個類
學生類,姓名類,家庭地址類。一個學生對應一個名字,但是可能會有兩個學生的地址是一樣的,這個地址由這兩個學生共用,也就是通過關係的模型來建立類。
public class Name{ ...}public class Student{ private Name name; private Address address; }public class Address{ ... }4.通過關聯式模式建立類
例子:設計一個課程Course 類
資料區: courseName: String、 students[]: String 、 numberOfStudent: int
方法區: 構造方法Course(courseName: String) ,getCourseName():String, addStudent(student:String): void, dropStudent(student: String):void、 getStudents():String[] ,getNumberOfStudents(): int
在這個Course類中可以看到資料結構的影子,一組資料,以及在這組資料上的關係的集合,有點像線性表。
Student.java
public class student { private String Name; public student(String na){ this.Name = na; } public String getName() { return Name; }}
Course.java
public class Course { private String CourseName; private student[] stu; private int numberOfStudent; public Course(String courseNa){ CourseName = courseNa; numberOfStudent = 0; stu= new student[20]; } public String getCourseName(){ return CourseName; } public void addStudent(student s){ int i = numberOfStudent; i++; stu[i] = s; numberOfStudent++; } public void DropStudent(student s){ numberOfStudent --; } public String GetStudent(int i){ return stu[i].getName(); } public int getNumberOfStudent(){ return numberOfStudent; }}
main.java
public class Main { public static void main(String[] args){ Course cou = new Course("math"); student stu1 = new student("xiao ming"); student stu2 = new student("Da ming"); cou.addStudent(stu1); cou.addStudent(stu2); System.out.println("The Course Name is "+ cou.getCourseName()); System.out.println("The number of student is "+ cou.getNumberOfStudent()); System.out.println("The List :\n"+cou.GetStudent(1)); System.out.println(cou.GetStudent(2)); } }
5.使用物件導向的範例來設計程式,遵循類設計指導。
一個對象應該是描述單一整體,類的操作應該在邏輯上有連貫性的目的。例如你可你將學生加入一個班級,但是不要將員工和學生都加到同一個班級裡去,之前學習的String,StringBuilder,StringBuffer,都是用來解決字串的問題,String用來處理不變的字串,StringBuilder用來建立可變的字串,StringBuffer可StringBuilder相似,但是可以StringBuffer包含了synchronized的方法用來更新字串。
高內聚低耦合,前後一致連貫。
摘自百科:
耦合性:也稱塊間聯絡。指軟體系統結構中各模組間相互聯絡緊密程度的一種度量。模組之間聯絡越緊密,其耦合性就越強,模組的獨立性則越差。模組間耦合高低取決於模組間介面的複雜性、調用的方式及傳遞的資訊
內聚性:又稱塊內聯絡。指模組的功能強度的度量,即一個模組內部各個元素彼此結合的緊密程度的度量。若一個模組內各元素(語名之間、程式段之間)聯絡的越緊密,則它的內聚性就越高。 所謂高內聚是指一個軟體模組是由相關性很強的程式碼群組成,只負責一項任務,也就是常說的單一責任原則。 耦合:一個軟體結構內不同模組之間互連程度的度量。 對於低耦合,粗淺的理解是:一個完整的系統,模組與模組之間,儘可能的使其獨立存在。也就是說,讓每個模組,儘可能的獨立完成某個特定的子功能。模組與 模組之間的介面,盡量的少而簡單。如果某兩個模組間的關係比較複雜的話,最好首先考慮進一步的模組劃分。這樣有利於修改和組合。