官术网_书友最值得收藏!

7.4 用實例分析設(shè)計一個類的流程

下面將會通過一個綜合實例,來總結(jié)本章中的一些比較重要的知識,從而總結(jié)一下編程思想。

7.4.1 如何在現(xiàn)實程序設(shè)計中提取一個類

在現(xiàn)實程序開發(fā)過程中,需要根據(jù)客戶提供的要求來編寫程序。在編寫程序之前,要分析客戶的要求,這是很關(guān)鍵的一步。針對客戶的要求,程序員要學(xué)會從客戶要求中提取出類,然后根據(jù)類再創(chuàng)建對象,在對象中規(guī)劃出方法和屬性值,最后,由這些方法和屬性值共同完成客戶提供的要求。

【實例7.10】下面舉一個實例,通過這個實例來證明以上所講述的步驟。

對于一個班的學(xué)生,開發(fā)一個學(xué)生信息的程序段。其要求如下所示:

(1)男生有10名,女生有15名。請輸出他們的姓名、性別、學(xué)號。

(2)其中張杰是男生,也是班長,請輸出其信息。

(3)對所有學(xué)生的成績信息進行輸出。

(4)通過班上的成績,選出最好的學(xué)生和最差的學(xué)生。

這個實例看起來有點復(fù)雜。其實仔細分析應(yīng)該不是很難。編寫程序最關(guān)鍵是程序員的思路,思路清晰了,代碼自然很好解決。下面看看如何分析這個實例。

對于這個實例,從所有的要求看來,都是圍繞著學(xué)生,所以提取一個類,就是學(xué)生類。如下:

01   class student
02   {
03     private name;
04     private code;
05     private sexy;
06     private duty;
07     private achievement;
08   }

這個類中的變量是根據(jù)實例要求而定義的,這些變量就是類中的屬性。再來分析實例中需要程序員做什么事情,而要做的事情就是類中的方法。觀察以上的4個要求,主要需要做的事情是輸出和排序,那么類的方法中必須要有輸出方法和排序方法。

對于第一個要求輸出的信息??梢跃帉懴铝蟹椒ê瘮?shù)。

void print()
{

}

下面再來觀察第二個要求、第三個要求,其實也是圍繞著學(xué)生信息這個數(shù)組來輸出的。而第四個要求中,要求將所有的數(shù)據(jù)進行排序,選擇出最大的數(shù)據(jù)和最小的數(shù)據(jù)。

好了,現(xiàn)在可以開始編寫程序了。先來看看此程序的流程圖,如圖7.1所示。

圖7.1 有關(guān)類的創(chuàng)建的實例

看下面的代碼。

01   ///這是一個學(xué)生類
02   ///通過帶參數(shù)的構(gòu)造器來構(gòu)造對象
03   ///通過設(shè)置器來設(shè)置對象的屬性
04   ///通過訪問器來訪問對象的屬性
05   ///tostring是一個將對象以字符串的形式輸出的方法
06   public class student
07   {
08      String name="";
09      String code="";
10      String sexy="";
11      String duty="";
12      double achievement;
13      public student(String name)
14      {
15         this.name=name;
16      }
17
18      void set(String name,String code,String sexy,String duty)
19      {
20         this.name=name;
21         this.code=code;
22         this.sexy=sexy;
23         this.duty=duty;
24      }
25         public String getname()//返回姓名
26         {
27           return name;
28         }
29         public String getcode()//返回學(xué)號
30       {
31           return code;
32         }
33           public String getsexy()//返回性別
34           {return sexy;
35           }
36           public String getduty()//返回職務(wù)
37           {return duty;}
38           public void setachi(double achievement)//設(shè)置成績
39           {
40              this.achievement=achievement;
41           }
42           public double getachi()//返回成績
43           {
44              return achievement;
45           }
46           public void print()//輸出
47           {
48              System.out.println("學(xué)生"+name+"的成績是:"+achievement);
49           }
50
51         public String tostring()
52         {
53           String infor="學(xué)生姓名:"+name+";"+"學(xué)生學(xué)號:"+code+";"+"學(xué)生性別:"
54   +sexy+";"+"學(xué)生職務(wù):"+duty;
55           return infor;
56         }
57   ///這是主運行程序
58   ///構(gòu)造出25個對象。使用帶參數(shù)的構(gòu)造器來構(gòu)造
59   ///再使用設(shè)置器來設(shè)置對象屬性
60   ///使用tostring方法將對象信息輸出
61         public static void main(String[] args)
62         {
63           ///構(gòu)造出學(xué)生對象
64           student st1=new student("王浩");
65           student st2=new student("李敏");
66           student st3=new student("李杰");
67           student st4=new student("王杰");
68           student st5=new student("王超");
69           student st6=new student("趙浩");
70           student st7=new student("錢浩");
71           student st8=new student("王松");
72           student st9=new student("朱濤");
73           student st10=new student("張杰");
74           student st11=new student("王敏");
75           student st12=new student("孫潔");
76           student st13=new student("趙麗");
77           student st14=new student("王麗");
78           student st15=new student("錢珍");
79           student st16=new student("王珍");
80           student st17=new student("王萍");
81           student st18=new student("錢萍");
82           student st19=new student("王燕");
83           student st20=new student("趙燕");
84           student st21=new student("孫燕");
85           student st22=new student("孫麗");
86           student st23=new student("林麗");
87           student st24=new student("張麗");
88           student st25=new student("鄭麗");
89   ///構(gòu)造一個學(xué)生類的對象數(shù)組,將所有的對象放到數(shù)組內(nèi)
90          student[]st=new student[]
91   {st1,st2,st3,st4,st5,st6,st7,st8,st9,st10,st11,st12,st13,st14,st15,st16,st17,st18,st19,st20
92   ,st21,st22,st23,st24,st25};
93   ///通過設(shè)置器對幾個對象進行賦值
94           st1.set("王浩","1","男","班員");
95           st2.set("李敏","2","男","班員");
96           st3.set("李杰","3","男","班員");
97           st4.set("王杰","4","男","班員");
98           st5.set("王超","5","男","班員");
99           st6.set("趙浩","6","男","班員");
100           st7.set("錢浩","7","男","班員");
101           st8.set("王松","8","男","班員");
102           st9.set("朱濤","9","男","班員");
103           st10.set("張杰","10","男","班長");
104           st11.set("王敏","11","女","班員");
105           st12.set("孫潔","12","女","班員");
106           st13.set("趙麗","13","女","班員");
107           st14.set("王麗","14","女","班員");
108           st15.set("錢珍","15","女","班員");
109           st16.set("王珍","16","女","班員");
110           st17.set("王萍","17","女","班員");
111           st18.set("錢萍","18","女","班員");
112           st19.set("王燕","19","女","班員");
113           st20.set("趙燕","20","女","班員");
114           st21.set("孫燕","21","女","班員");
115           st22.set("孫麗","22","女","班員");
116           st23.set("林麗","23","女","班員");
117           st24.set("張麗","24","女","班員");
118           st25.set("鄭麗","25","女","班員");
119           System.out.println(st1.tostring());
120           System.out.println(st2.tostring());
121           System.out.println(st3.tostring());
122           System.out.println(st4.tostring());
123           System.out.println(st5.tostring());
124           System.out.println(st6.tostring());
125           System.out.println(st7.tostring());
126           System.out.println(st8.tostring());
127           System.out.println(st9.tostring());
128           System.out.println(st10.tostring());
129           System.out.println(st11.tostring());
130           System.out.println(st12.tostring());
131           System.out.println(st13.tostring());
132           System.out.println(st14.tostring());
133           System.out.println(st15.tostring());
134           System.out.println(st16.tostring());
135           System.out.println(st17.tostring());
136           System.out.println(st18.tostring());
137           System.out.println(st19.tostring());
138           System.out.println(st20.tostring());
139           System.out.println(st21.tostring());
140           System.out.println(st22.tostring());
141           System.out.println(st23.tostring());
142           System.out.println(st24.tostring());
143           System.out.println(st25.tostring());
144   ///通過設(shè)置器給幾個對象進行賦值
145           st1.setachi(87.5);
146           st2.setachi(98);
147           st3.setachi(78);
148           st4.setachi(90);
149           st5.setachi(84);
150           st6.setachi(78);
151           st7.setachi(91);
152           st8.setachi(99.5);
153           st9.setachi(64);
154           st10.setachi(100);
155           st11.setachi(98);
156           st12.setachi(76);
157           st13.setachi(88);
158           st14.setachi(64);
159           st15.setachi(97);
160           st16.setachi(68);
161           st17.setachi(90);
162           st18.setachi(99);
163           st19.setachi(77);
164           st20.setachi(78);
165           st21.setachi(67);
166           st22.setachi(99);
167           st23.setachi(97.5);
168           st24.setachi(92);
169           st25.setachi(88);
170           st1.print();
171           st2.print();
172           st3.print();
173           st4.print();
174           st5.print();
175           st6.print();
176           st7.print();
177           st8.print();
178           st9.print();
179           st10.print();
180           st11.print();
181           st12.print();
182           st13.print();
183           st14.print();
184           st15.print();
185           st16.print();
186           st17.print();
187           st18.print();
188           st19.print();
189           st20.print();
190           st21.print();
191           st22.print();
192           st23.print();
193           st24.print();
194           st25.print();
195   ///通過循環(huán)語句對數(shù)組元素進行排序
196          for(int i=0;i<st.length;i++)
197          {
198           for(int j=0;j<st.length;j++)
199           {
200   ///通過比較兩個元素的大小,如果前面比后面元素大,進行排序
201              if(st[i].achievement<st[j].achievement)
202              {
203                student x;
204                x=st[j];
205                st[j]=st[i];
206                st[i]=x;
207              }
208           }
209         }
210            System.out.println("成績最好的是:"+st[24].name+",成績是:"+st[24].achievement);
211            System.out.println("成績最差的是:"+st[0].name+",成績是:"+st[0].achievement);
212         }
213   }

【代碼說明】這個程序段的主要思路如下所示:

?先提取一個類即學(xué)生類student。

?根據(jù)學(xué)生類,創(chuàng)建對象。此時每個同學(xué)就是一個學(xué)生類的對象。

?編寫設(shè)置器和訪問器(第25~45行)。(后面會詳細講述它)

?輸出學(xué)生信息(第119~143行)。

?通過循環(huán)語句和判斷語句對學(xué)生成績進行排序(第196~212行)。

了解上面的思路后,整個程序就很清晰了。剩下的就是對代碼的處理。

【運行結(jié)果】

學(xué)生姓名:王浩;學(xué)生學(xué)號:1;學(xué)生性別:男;學(xué)生職務(wù):班員
學(xué)生姓名:李敏;學(xué)生學(xué)號:2;學(xué)生性別:男;學(xué)生職務(wù):班員
學(xué)生姓名:李杰;學(xué)生學(xué)號:3;學(xué)生性別:男;學(xué)生職務(wù):班員
學(xué)生姓名:王杰;學(xué)生學(xué)號:4;學(xué)生性別:男;學(xué)生職務(wù):班員
學(xué)生姓名:王超;學(xué)生學(xué)號:5;學(xué)生性別:男;學(xué)生職務(wù):班員
學(xué)生姓名:趙浩;學(xué)生學(xué)號:6;學(xué)生性別:男;學(xué)生職務(wù):班員
學(xué)生姓名:錢浩;學(xué)生學(xué)號:7;學(xué)生性別:男;學(xué)生職務(wù):班員
學(xué)生姓名:王松;學(xué)生學(xué)號:8;學(xué)生性別:男;學(xué)生職務(wù):班員
學(xué)生姓名:朱濤;學(xué)生學(xué)號:9;學(xué)生性別:男;學(xué)生職務(wù):班員
學(xué)生姓名:張杰;學(xué)生學(xué)號:10;學(xué)生性別:男;學(xué)生職務(wù):班長
學(xué)生姓名:王敏;學(xué)生學(xué)號:11;學(xué)生性別:女;學(xué)生職務(wù):班員
學(xué)生姓名:孫潔;學(xué)生學(xué)號:12;學(xué)生性別:女;學(xué)生職務(wù):班員
學(xué)生姓名:趙麗;學(xué)生學(xué)號:13;學(xué)生性別:女;學(xué)生職務(wù):班員
學(xué)生姓名:王麗;學(xué)生學(xué)號:14;學(xué)生性別:女;學(xué)生職務(wù):班員
學(xué)生姓名:錢珍;學(xué)生學(xué)號:15;學(xué)生性別:女;學(xué)生職務(wù):班員
學(xué)生姓名:王珍;學(xué)生學(xué)號:16;學(xué)生性別:女;學(xué)生職務(wù):班員
學(xué)生姓名:王萍;學(xué)生學(xué)號:17;學(xué)生性別:女;學(xué)生職務(wù):班員
學(xué)生姓名:錢萍;學(xué)生學(xué)號:18;學(xué)生性別:女;學(xué)生職務(wù):班員
學(xué)生姓名:王燕;學(xué)生學(xué)號:19;學(xué)生性別:女;學(xué)生職務(wù):班員
學(xué)生姓名:趙燕;學(xué)生學(xué)號:20;學(xué)生性別:女;學(xué)生職務(wù):班員
學(xué)生姓名:孫燕;學(xué)生學(xué)號:21;學(xué)生性別:女;學(xué)生職務(wù):班員
學(xué)生姓名:孫麗;學(xué)生學(xué)號:22;學(xué)生性別:女;學(xué)生職務(wù):班員
學(xué)生姓名:林麗;學(xué)生學(xué)號:23;學(xué)生性別:女;學(xué)生職務(wù):班員
學(xué)生姓名:張麗;學(xué)生學(xué)號:24;學(xué)生性別:女;學(xué)生職務(wù):班員
學(xué)生姓名:鄭麗;學(xué)生學(xué)號:25;學(xué)生性別:女;學(xué)生職務(wù):班員
學(xué)生王浩的成績是:87.5
學(xué)生李敏的成績是:98.0
學(xué)生李杰的成績是:78.0
學(xué)生王杰的成績是:90.0
學(xué)生王超的成績是:84.0
學(xué)生趙浩的成績是:78.0
學(xué)生錢浩的成績是:91.0
學(xué)生王松的成績是:99.5
學(xué)生朱濤的成績是:64.0
學(xué)生張杰的成績是:100.0
學(xué)生王敏的成績是:98.0
學(xué)生孫潔的成績是:76.0
學(xué)生趙麗的成績是:88.0
學(xué)生王麗的成績是:64.0
學(xué)生錢珍的成績是:97.0
學(xué)生王珍的成績是:68.0
學(xué)生王萍的成績是:90.0
學(xué)生錢萍的成績是:99.0
學(xué)生王燕的成績是:77.0
學(xué)生趙燕的成績是:78.0
學(xué)生孫燕的成績是:67.0
學(xué)生孫麗的成績是:99.0
學(xué)生林麗的成績是:97.5
學(xué)生張麗的成績是:92.0
學(xué)生鄭麗的成績是:88.0
成績最好的是:張杰,成績是:100.0
成績最差的是:朱濤,成績是:64.0

7.4.2 設(shè)置器和訪問器

在上面的程序段中,出現(xiàn)過“set”和“get”函數(shù),那么這些函數(shù)起著什么作用?在Java語言中把“set”函數(shù)稱為設(shè)置器,把“get”函數(shù)稱為訪問器。

訪問器只查看對象的狀態(tài)或者返回對象的屬性值。訪問器有以下特點:

?方法聲明部分有返回值類型。

?方法聲明沒有參數(shù)。

?方法體內(nèi)有返回語句。

設(shè)置器主要是完成某個對象屬性值的賦值功能。設(shè)置器有以下特點:

?方法返回類型為void,即不返回類型。

?方法聲明中至少有一個參數(shù)。

?方法體內(nèi)肯定有賦值語句。

把上例中的設(shè)置器和訪問器單獨拿出來看看是否是具有這些特點。

01   void set(String name,String code,String sexy,String duty)
02      {
03         this.name=name;
04         this.code=code;
05         this.sexy=sexy;
06         this.duty=duty;
07           }
08         public String getname()
09         {
10           return name;
11
12         }
13         public String getcode()
14         {return code;
15           }
16           public String getsexy()
17           {return sexy;
18           }
19           public String getduty()
20           {return duty;}
21           public void setachi(double achievement)
22           {
23              this.achievement=achievement;
24           }
25           public double getachi()
26           {
27              return achievement;
28           }

【代碼說明】先觀察這些“set”函數(shù):“set”、“setachi”函數(shù)?!皏oid set(String name,String code,String sexy,String duty)”帶了4個參數(shù),無返回值,存在4個賦值語句?!皃ublic void setachi(double achievement)”帶了一個參數(shù),無返回值,且存在一個賦值語句。

再來觀察“get”函數(shù):“getname”、“getcode”、“getduty”、“getsexy”、“getachi”。這5個訪問器都是有返回值,不帶任何參數(shù),且方法體內(nèi)有一個返回語句。

如果要實現(xiàn)一個對屬性的訪問和設(shè)置,一般應(yīng)該有以下幾項內(nèi)容:

?一個私有的字段變量。

?一個公開的字段訪問器。

?一個公開的字段設(shè)置器。

7.4.3 總結(jié)

本章正式開始接觸Java程序設(shè)計的特點,主要講述了什么是類和如何提取一個類。在本章中舉了一個現(xiàn)實生活中的程序開發(fā)的實例,并詳細地分析了編寫程序的主要思路。希望讀者能熟練地掌握。其實想要掌握一門編程語言,最關(guān)鍵的就是要多多練習(xí),正所謂熟能生巧。

主站蜘蛛池模板: 宝兴县| 新田县| 涞水县| 青州市| 区。| 密山市| 龙陵县| 龙岩市| 晴隆县| 临江市| 漯河市| 和田县| 岢岚县| 凤台县| 开阳县| 上栗县| 益阳市| 宜城市| 化州市| 石嘴山市| 金平| 定襄县| 南开区| 盘山县| 克什克腾旗| 蓬溪县| 浦北县| 曲靖市| 班戈县| 雅安市| 岳普湖县| 奇台县| 增城市| 虹口区| 平山县| 康定县| 繁昌县| 绥德县| 临沂市| 水富县| 嘉义县|