a. Mô t :
Ng i s d ng tìm ki m đ ng đi ng n nh t gi a hai đi m trong thành ph .
b. Dòng s ki n : Dòng s ki n chính :
- Ng i s d ng xác đnh đi m kh i hành. - Ng i s d ng xác đnh đi m c n đ n. - Ng i s d ng ch n ch c n ng tìm đ ng đi ng n nh t. - H th ng th c hi n tìm ki m đ ng đi ng n nh t gi a hai đi m. - H th ng hi n th ch d n đ ng đi cho ng i s d ng. - H th ng v đ ng đi trên b n đ . - Use Case k t thúc. c. Yêu c u đ c bi t : - Không có. d. i u ki n đ u : - Không có. e. i u ki n sau : - H th ng v l i b n đ . f. i m m r ng : - Không có. 3.1.7. Help : a. Mô t :
b. Dòng s ki n : Dòng s ki n chính : - Ng i s d ng ch n ch c n ng h ng d n s d ng. - H th ng hi n th danh sách các ch c n ng c a ph n m m. - Ng i s d ng ch n ch c n ng c a h th ng c n h ng d n. - H th ng hi n th thông tin h ng d n s d ng c a ch c n ng đã ch n. - Use Case k t thúc. c. Yêu c u đ c bi t : - Không có. d. i u ki n đ u : - Không có. e. i u ki n sau : - H th ng v l i b n đ . f. i m m r ng : - Không có.
3.2. Các bi u đ ho t đ ng:
3.2.1. Hi n th b n đ
Actor1
1: //Launch Application
MobileMap MapCanvas Map
2: // Paint
3: //Paint
4: //DrawCell
5: // drawName
3.2.2. Tìm đ ng theo tên:
Actor1
1: //select Search
MobileMap MapCanvas Map
9: //Paint
10: //DrawCell
11: // drawName
SearchBox
2: // changeDisplay
3: //Select Street Nam 4: // select OK
6: // changeDisplay 5: // SelectStreet
7: //SelectStreet
8: //Move
3.2.3. Di chuy n b n đ :
Actor1
1: //press Control Key
MobileMap MapCanvas Map
2: // Move
3: //Move
5: //DrawCell
6: // drawName 4: //Change Map Coord
Hình 3.4: Sequence diagram Di chuy n b n đ
3.2.4. Tìm đ ng đi ng n nh t
Actor1
1: //select Shortest Path
MobileMap MapCanvas Map
2: //ShortesPath
3: //ShortestPath
4: // FindShortestPath
5: // showInstruction
3.3. S đ m c thi t k 3.3.1. S đ MobileMap Map Street Segment MapCanvas SearchBox Font Menu Route Edge «interface» Quece «interface» Level Hình 3.6 S đ m c thi t k
3.3.2. Danh sách các l p chính:
3.3.2.1. L p Mobile Map:
ây là l p Midlet c a ch ng trình, nhi m v chính c a l p này là qu n lý vi c kh i t o ch ng trình và chuy n đ i qua l i gi a hai màn hình duy t b n đ và màn hình tìm đ ng.
L p Menu
ây là m t l p khá quan tr ng đ t o s ti n d ng cho ng i s d ng. đ i t ng menu đ c t o ra đ qu n lý các menu trong m i màn hình và các thao tác c a ng i s d ng đ i v i các đ i t ng menu và soft ley.
3.3.2.2. L p Font:
L p Font t o s đ c l p trong vi c v kí t , v chu i c ng nh v đo n v n.
Vi c s d ng m t l p font bitmap t qu n có th làm cho ch ng trình c a ta có nhi u b font khác nhau thay vì ch m t b font nh font h th ng. và đi u này t o ra s đ ng nh t c a ch ng trình trên các thi t b . vì các thi t b khác nhau s có m t b font khác nhau mà kích th c c ng khác nhau
3.3.2.3. L p Searchbox:
Nhi m v chính c a l p SearchBox này là tìm và li t kê các
đ ng có tên g n v i tên mà ng i dùng mu n tìm.
3.3.2.4. L p Map:
ây là thành ph n chính c a c ch ng trình, t t c m i tính toán, h u nh đ c t p trung x lí trên thành ph n này.
3.3.2.5. L p MapCanvas:
L p MapCanvas là l p canvas chính c a ch ng trình. Ngoài vi c qu n lí b n đ , l p MapCanvas này nh n và x lí s b các thông tin nh n phím c ng nh vi c hi n th các màn hình ph nh màn hình tr giúp hay màn hình gi i thi u.
Ch ng 4: T i u hoá ng d ng
Ý ngh a và n i dung c a vi c t i u hóa :
đ m b o tính hi u qu , m i ph n m m khi đ c phát tri n luôn c n t i u hóa. i v i ng d ng J2ME, vi c t i u hóa ch ng trình càng có ý ngh a quan tr ng do các thi t b di đ ng có tài nguyên h th ng r t h n ch : t c đ x lý ch m, dung l ng b nh r t nh và kh n ng l u tr th p. C n c vào các h n ch nêu trên, vi c t i u hóa ch ng trình s t p trung ch y u vào ba n i dung :
• T i u hóa kích th c ch ng trình • T i u hóa v m t t c đ
• T i u hóa vi c s d ng b nh
4.1. T i u hóa kích th c ch ng trình :
Các nguyên t逸c t嘘i 逢u kích th逢噂c trong thi院t k院 ch逢挨ng trình :
4.1.1. Gi m các l p không c n thi t :
B c đ u tiên đ gi m kích th c c a ch ng trình đó là lo i b vi c t o nh ng l p không c n thi t. Ch nên tách l p m i khi đi u
đó th c s quan tr ng và có ý ngh a. Các l p có nhi u x lý, nhi u thông tin t ng t nhau thì nên k t h p l i thành m t l p
tra bi n c c b (LocalVariableTable), b sung hàm t o m c
đ nh… Chúng ta có th th y rõ đi u này thông qua ví d v m t l p t i thi u nh sau :
public class DoNothing {
}
T p tin DoThing.java sau khi đ c biên d ch thành t p tin DoNothing.class s có kích th c là 257 bytes trong đó ch có 5 bytes là bytecode. Chúng ta có th xem thông tin v l p này b ng cách th c hi n dòng l nh :
javap –v DoNothing
4.1.2. H n ch s d ng inner class và anonymous class :
M t trong nh ng l p nên lo i b đó là các l p n i (inner classes) và các l p vô danh (anonymous classes). Trong ngôn ng Java, các anonymous classes th ng đ c dùng đ cài đ t x lý cho các s ki n (event listener). N u th c s c n thi t, chúng ta có th khai báo m t l p chung đ x lý t t c các s ki n b i vì nhi u
đ i t ng có th s d ng chung nhi u listener khác nhau. L p
đ c t o ra s khai báo implements các interfaces c n thi t ví d nh CommandListener, ItemStateListener v.v…, nh vào tham s
đ c truy n cho các ph ng th c commandAction và
itemStateChanged, chúng ta có th phân bi t đ i t ng nào c n
đ c x lý hành đ ng.
Các inner classes c ng làm t ng thêm kích th c c a ch ng trình do compiler ph i t o thêm các bi n và các ph ng th c đ c bi t đ giúp cho l p này có th truy xu t các thu c tính và
ph ng th c private c a l p đang ch a nó, và ng c l i, giúp cho các l p đang ch a inner class có th truy xu t các thành ph n private c a l p này.
4.1.3. Gi m cây k th a :
Trong thi t k c n h n ch vi c k th a nhi u c p và không s d ng l p tr u t ng n u không c n thi t.
4.1.4. Gi m chi u dài các đ nh danh (identifiers) :
Nên đ t tên ng n cho các h ng, bi n, các ph ng th c và tên l p. Ngoài ra, do m i ng d ng J2ME đ u đ c đóng gói riêng r nên các l p trong nhi u ng d ng khác nhau trên thi t b di đ ng không th xung đ t nhau. Vì th , n u m t l p không ph i xây d ng đ tr thành m t thành ph n trong th vi n thì không c n thi t ph i đ t l p này trong m t package (không dùng t khóa package đ u t p tin mã ngu n). i u này có tác d ng gi m
4.1.5. H n ch s d ng getter / setter :
Khi c n cho phép các đ i t ng c a l p khác đ c truy xu t m t thu c tính c a l p, nên khai báo thu c tính này m c public thay vì s d ng các hàm get, set. Th c ra, đây không ph i là m t phong cách l p trình t t, tuy nhiên lo i b hàm get, set c ng giúp chúng ta gi m đ c kích th c c a l p.
4.1.6. L u ý khi kh i t o m ng :
Nên tránh kh i t o tr c ti p các ph n t c a m ng. Thông th ng, n u chúng ta bi t tr c giá tr c a t ng ph n t trong m ng,
chúng ta s khai báo nh ví d sau
int[] arr = {11, 22, 33, 44, 55, 66};
Khi vi t dòng l nh trên, chúng ta hi v ng r ng Java s sao chép các giá tr đ c kh i gán vào vùng nh v a đ c c p phát cho m ng. Tuy nhiên, n u chúng ta d ch ng c bytecode c a đo n ch ng trình này (cú pháp : javap –c tên_l p) s đ c k t qu nh sau :
K t qu trên ch ng t r ng Java không sao chép tr c ti p vào vùng nh c a m ng mà th c hi n l n l t các câu l nh t ng ng nh sau :
Do v y, kích th c c a t p l p sau khi biên d ch s t ng lên đáng k vì ph i ch a r t nhi u byte code đ c l p đi l p l i đ gán giá tr cho t ng ph n t c a m ng.
4: aload_0 5: bipush 6 7: newarray int 9: dup 10: iconst_0 11: bipush 11 13: iastore 14: dup 15: iconst_1 16: bipush 22 18: iastore 19: dup 20: iconst_2 21: bipush 33 23: iastore 24: dup 25: iconst_3 26: bipush 44
29: dup 30: iconst_4 31: bipush 55 33: iastore 34: dup 35: iconst_5 36: bipush 66 38: iastore arr[0] = 11; arr[1] = 22; arr[2] = 33; arr[3] = 44; arr[4] = 55; arr[5] = 66;
Tóm l i, khi kích th c c a m ng l n, chúng ta không nên kh i t o tr c ti p giá tr ban đ u c a các ph n t trong m ng, thay vào
đó, l u các d li u này trên m t t p tin tài nguyên và xây d ng hàm đ c r i gán giá tr cho m ng khi th c thi.
4.1.7. Gi m kích th c các t p tin tài nguyên :
d li u, icons, các t p tin hình nh. Thông th ng, chúng ta ch có th h n ch kích th c c a hình nh, ít khi gi m đ c trên các t p tin d ng khác.
4.1.8. H n ch s d ng các gói th vi n b sung :
Các gói th vi n c a hãng th ba s đ c đóng gói vào trong ng d ng, bao g m c nh ng l p mà chúng ta không c n đ n. Vì th , không nên s d ng n u không th c s c n thi t.
4.1.9. T i u kích th c ch ng trình khi đóng gói :
4.1.9.1. Phân tích quá trình đóng gói ng d ng :
Hình 4.1 : Mô hình quá trình đóng gói ng d ng J2ME
Các files mã ngu n đ c trình java compiler biên d ch ra d ng byte code. M i l p trong mã ngu n (bao g m c inner class) s
đ c biên d ch thành các t p tin .class riêng r . Các t p tin này, cùng v i các icons, các t p tin d li u, hình nh v.v… đ c trình
đóng gói c ng t o ra m t t p tin mô t ng d ng – JAD (Java Application Descriptor) nh m cung c p cho ph n m m qu n lý
ng d ng trên thi t b di đ ng các thông tin c n thi t đ ph m m m này xác đ nh ng d ng c a chúng ta có thích h p đ th c thi trên thi t b hay không.
Nh v y, xét toàn b quá trình biên d ch và đóng gói ng d ng, chúng ta có th th y r ng ngoài các bi n pháp giúp gi m kích th c ch ng trình nh đã trình bày ph n tr c, chúng ta v n còn có thêm c h i gi m kích th c c a ng d ng n u (có th ) gi m đ c kích th c c a các t p tin .class, có ngh a là gi m s byte code trên t p tin .class sau khi biên d ch. Tuy nhiên, vi c s a
đ i byte code là vi c làm r t khó kh n và nguy hi m. Dù v y, chúng v n có th gi m đ c m t s l ng bytes nh t đnh b ng cách gi m đ n m c t i đa s ký t dùng đ đ t tên cho các bi n thành ph n, các h ng s và các ph ng th c.
- i v i các ph ng th c và thu c tính đ c khai báo m c private, tên c a chúng đ c trình biên d ch thay th b ng m t mã có d ng _$xxx.
- i v i các ph ng th c và thu c tính đ c khai báo m c public, tên c a các thành ph n này đ c gi nguyên vì chúng có th đ c các đ i t ng c a nh ng l p khác truy xu t đ n.
4.1.10. Th c hi n v i Obfucator
- Rút ng n h n n a s ký t dùng đ đ t tên cho các thành ph n m c private. - t l i tên cho các ph ng th c và thu c tính đ c khai báo m c public sao cho t i u nh t (s ký t ít nh t và
không đ c trùng v i các thành ph n c a l p khác). S d ng obfuscator :
Trên th tr ng hi n nay có r t nhi u ph n m m h tr giúp chúng ta th c hi n vi c t i u kích th c cho t p tin JAR (đ c g i là obfuscator). Các ph n m m này đa s đ u ho t đ ng d a theo nguyên t c gi m chi u dài các thu c tính và ph ng th c c a l p nh đã nêu ph n trên. Các ph n m m công c này ph n l n là mi n phí. Tiêu bi u nh proguard
(http://proguard.sourceforge.net), retroguard
(http://www.retrologic.com/retroguard-main.html)... S đ s d ng obfuscator :
4.2. T i u hóa v t c đ :
4.2.1. Khái quát chung :
- Khi mu n t i u v t c đ , tr c tiên, c n t p trung vào t i u vi c thi t k
và l a ch n gi i thu t cho h p lý, sau đó m i th c hi n vi c c i thi n t c đ m c c p th p trên t ng dòng l nh b i vì ph n l n th i gian ch ng trình ho t đ ng đ c dùng cho vi c th c hi n các hàm x lý trong th vi n do chúng ta g i đ n, đ c bi t là đ i v i các ch c n ng x lý đ h a c p th p.
- Quy t c 90/10 : “trong các ch ng trình có nhu c u x lý đ h a l n, đ c bi t là các ph n m m trò ch i hành đ ng, 90% t ng th i gian x lý c a ch ng trình dùng đ x lý 10% mã ngu n”. Nh v y, 90% mã ngu n còn l i ch c n 10% th i gian đ x lý. Do
đó, chúng ta c n ph i t p trung xác đnh nh ng thao tác x lý nào tiêu t n nhi u th i gian x lý nh t đ tìm cách t i u hóa chúng. - Hi u su t thi hành các l nh không gi ng nhau trên thi t b c a các nhà s n xu t khác nhau do m i hãng s n xu t có công ngh và cách cài đ t x lý theo đ c t MIDP khác nhau.
4.2.2. Tìm các v trí c n t i u v t c đ v i Profiler :