標籤:
------Java培訓、Android培訓、iOS培訓、.Net培訓、期待與您交流! -------
一道課後習題引發的思考/*需求:設計一個類Point2D,用來表示二維平面中某個點1> 屬性* double x* double y 2> 方法* 屬性相應的set和get方法* 設計一個對象方法同時設定x和y* 設計一個對象方法計算跟其他點的距離* 設計一個類方法計算兩個點之間的距離 3> 提示* C語言的math.h中有個函數:double pow(double n,double m); 計算n的m次方* C語言的math.h中有個函數:double sqrt(double n); 計算根號n的值(對n進行開根)*//*一、下面是My Code:
1 #import <Foundation/Foundation.h> 2 #import <math.h> 3 4 @interface Point2D : NSObject 5 6 // 點 7 { 8 double _x; // x的值 9 double _y; // y的值10 }11 12 // x的get和set方法13 14 - (void)setX : (double)x;15 - (double)x;16 17 // y的get和set方法18 - (void)setY : (double)y;19 - (double)y;20 21 // 同時設定x和y的值22 - (void)setX : (double)x andY : (double)y;23 24 // 計算和其他點得距離25 - (double)distanceWithOtherPoint : (Point2D *)p;26 27 // 計算點和點之間的距離28 + (double)distanceBetweenPoint1 : (Point2D *)p1 andPoint2 : (Point2D *)p2;29 30 @end // Point2D聲明31 32 // 方法33 @implementation Point2D34 35 - (void)setX : (double)x36 {37 _x = x;38 }39 - (double)x40 {41 return _x;42 }43 - (void)setY : (double)y44 {45 _y = y;46 }47 - (double)y48 {49 return _y;50 }51 - (void)setX : (double)x andY : (double)y52 {53 _x = x;54 _y = y;55 56 // [self setX:x]; //設定x過程中可能涉及到過濾的問題,如果x的值不符合要求,我們需要處理57 // [self setY:y];58 59 }60 - (double)distanceWithOtherPoint : (Point2D *)p61 { 62 double x1 = [p x];63 double y1 = [p y];64 return sqrt(pow(_x-x1, 2) + pow(_y-y1, 2));65 }66 + (double)distanceBetweenPoint1 : (Point2D *)p1 andPoint2 : (Point2D *)p267 {68 double x1 = [p1 x];69 double y1 = [p1 y];70 double x2 = [p2 x];71 double y2 = [p2 x];72 return sqrt(pow(x1-x2, 2) + pow(y1-y2, 2));73 }74 75 @end //Point2D76 77 //主函數78 int main()79 {80 Point2D *pt1 = [Point2D new];81 Point2D *pt2 = [Point2D new];82 Point2D *pt3 = [Point2D new];83 //[pt1 setX : 2 andY : 2];84 [pt2 setX : 4 andY : 4]; 85 [pt3 setX : 9 andY : 9];86 double distance1 = [pt1distanceWithOtherPoint : pt2];87 double distance2 = [Point2DdistanceBetweenPoint1 : pt2 andPoint2 : pt3];88 NSLog(@"The distande with other point is %f",distance1);89 NSLog(@"The distande between point1 and point2 is %f",distance2);90 91 return 0;92 93 }
二、引發的思考第一、如何寫好注釋我對注釋一直都不是很重視,讀大學寫代碼也很少寫注釋,也不知道怎麼寫,什麼時候該寫,什麼時候不該寫,沒什麼概念,通過這個作業題正好可以練習如何寫好注釋,寫注釋主要就是為了可讀性,多看優秀代碼,看老師是如何注釋的,養成寫注釋習慣。第二、避免重複代碼// 計算和其他點得距離 我的方法一
1 - (double)distanceWithOtherPoint : (Point2D *)p2 { 3 double x1 = [p x];4 double y1 = [p y];5 return sqrt(pow(_x-x1, 2) + pow(_y-y1,2));6 }
// 方法二,因為後面有一個求兩點之間距離的方法,兩者有相似之處,需要避免重複代碼
1 - (double)distanceWithOther:(Point2D *)other2 {3 // 不要再傻乎乎算一遍了,直接調用類方法即可4 return [Point2DdistanceBetweenPoint1:self andPoint2:other];5 }
找代碼之間的共同點,寫好一個方法,其他方法可以間接調用 第三、並不是代碼越精簡越好,有的時候為了可讀性,代碼需要寫的詳細一點// 求兩點之間距離 ,我的 方法一
1 + (double)distanceBetweenPoint1 : (Point2D *)p1 andPoint2 : (Point2D *)p22 {3 double x1 = [p1 x];4 double y1 = [p1 y];5 double x2 = [p2 x];6 double y2 = [p2 x];7 returnsqrt(pow(x1-x2, 2) + pow(y1-y2, 2)); // 一行代碼解決,但可讀性不強8 //9 }
// 第二種方法 分步驟,思路清晰
1 + (double)distanceBetweenPoint1:(Point2D *)p1 andPoint2:(Point2D *)p2 2 { 3 // 兩點距離公式:( (x1-x2)的平方 + (y1-y2)的平方 )開根 4 // x1-x2 5 double xDelta = [p1 x] - [p2x]; 6 // (x1-x2)的平方 7 double xDeltaPingFang =pow(xDelta, 2); 8 // y1-y2 9 double yDelta = [p1 y] - [p2y];10 // (y1-y2)的平方11 double yDeltaPingFang =pow(yDelta, 2);12 return sqrt(xDeltaPingFang + yDeltaPingFang);13 }
第四、編程經驗的問題// 同時設定x的值和y的值 ,方法一
1 - (void)setX : (double)x andY : (double)y 2 { 3 _x = x; 4 _y = y; 5 } // 這裡沒考慮到設定x過程中可能涉及到過濾的問題,如果x的值不符合要求,我們需要處理 6 7 // 方法二 8 - (void)setX : (double)x andY : (double)y 9 {10 [self setX:x]; // 這裡調用set方法設定x和y的值,考慮了x過濾問題11 [self setY:y];12 }
這是我做這道練習題的一些思考,歡迎批評指正!
黑馬程式員---Objective-C基礎學習---一道課後習題引發的思考