黑馬程式員---Objective-C基礎學習---一道課後習題引發的思考

來源:互聯網
上載者:User

標籤:

------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基礎學習---一道課後習題引發的思考

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.