Trang 1 trên tổng số 3 123 Cuối cùngCuối cùng
Từ 1 tới 10 trên tổng số 30 kết quả

Đề tài: Đánh giá tính mở rộng của Class trong lập trình C#

  1. #1
    Ngày gia nhập
    09 2006
    Nơi ở
    /usr/share/.hack@
    Bài viết
    1,433

    Thumbs down Đánh giá tính mở rộng của Class trong lập trình C#

    Đang học OOP nên chợt có suy nghĩ này.

    Với bài toán mà tính điểm mà mọi người vẫn hay làm giả sử tạo một class để tính điểm với 3 môn toán, lý , hóa ta có thể viết như sau:

    X nghĩ ra 2 cách viết:

    Cách 1:
    Visual C# Code:
    1.     class Mark
    2.     {
    3.         private double _math = 0;
    4.         private double _physics = 0;
    5.         private double _chemistry = 0;
    6.  
    7.         public Mark() { }
    8.         public Mark(double math)
    9.         {
    10.             _math = math;
    11.         }
    12.         public Mark(double physics)
    13.         {
    14.             _physics = physics;
    15.         }
    16.         public Mark(double chemistry)
    17.         {
    18.             _chemistry = chemistry;
    19.         }
    20.         public Mark(double math, double physics)
    21.         {
    22.             _math = math;
    23.             _physics = physics;
    24.         }
    25.         public Mark(double math, double chemistry)
    26.         {
    27.             _math = math;
    28.             _chemistry = chemistry;
    29.         }
    30.         public Mark(double math, double physics, double chemistry)
    31.         {
    32.             _math = math;
    33.             _physics = physics;
    34.             _chemistry = chemistry;
    35.         }
    36.     }

    Cách 2:

    Visual C# Code:
    1.     class Score
    2.     {
    3.         enum Subject
    4.         {
    5.             Math = 0, Physics, Chemistry
    6.         }
    7.         public const int MAX_SUBJECT = 100;
    8.         private double[] _score = new double[MAX_SUBJECT];
    9.  
    10.         public Score()
    11.         {
    12.             Initialize();
    13.         }
    14.         public Score(Subject subject, double score)
    15.         {
    16.             Initialize();
    17.             _score[subject] = score;
    18.         }
    19.  
    20.         public void SetScore(Subject subject, double score)
    21.         {
    22.             _score[subject] = score;
    23.         }
    24.         public double GetScore(Subject subject)
    25.         {
    26.             return _score[subject];
    27.         }
    28.         public void Initialize()
    29.         {
    30.             foreach (double score in _score)
    31.                 score = 0;
    32.         }
    33.     }

    + Nếu dùng Properties thì ta có thể quan sát rõ chi tiết với các subject
    nhưng nếu mà mở rộng ra với nhiều subject nữa thì ..... ngán ra phết
    + Nếu dùng method thì có vẻ thuận lợi hơn, ở đây X lợi dụng enum để đánh chỉ mục điểm số môn học.

    + Mình cũng chỉ hiểu đến thế và đánh nó như vậy. Giả sử nếu mở rộng ra với nhiều subject nữa và nhiều thành phần nữa liệu cái nào hay hơn?

    Các bạn có cách nào hay hay thì cùng thảo luận nhé
    None!

  2. #2
    Ngày gia nhập
    10 2007
    Nơi ở
    HCMUNS
    Bài viết
    459

    Cách 1 : ko có tính mở rộng
    Cách 2 : mở rộng khó, hơn nữa nhìn ... rất vô duyên :">

    Nói thật, chả cách nào trên 2 cái trên hay cả :P

    Theo thiển ý của nhc thì làm thía này :

    Subject {name, mark}
    Physics : Subject
    Maths : Subject
    Chemistry : Subject
    Student {name, address, ..., list<Subject>}
    Keep moving forward!

    ... Retired ...

  3. #3
    Ngày gia nhập
    09 2006
    Nơi ở
    /usr/share/.hack@
    Bài viết
    1,433

    Trích dẫn Nguyên bản được gửi bởi nhc1987 Xem bài viết
    Cách 1 : ko có tính mở rộng
    Cách 2 : mở rộng khó, hơn nữa nhìn ... rất vô duyên :">

    Nói thật, chả cách nào trên 2 cái trên hay cả :P

    Theo thiển ý của nhc thì làm thía này :

    Subject {name, mark}
    Physics : Subject
    Maths : Subject
    Chemistry : Subject
    Student {name, address, ..., list<Subject>}
    biết ngay kiểu gì cũng dụ được cha này

    tiếp về cái List<Subject> đi Cường đô
    None!

  4. #4
    Ngày gia nhập
    06 2007
    Nơi ở
    HCM
    Bài viết
    365

    Uh , viết như XCROSS thì mỗi khi thêm 1 môn học hay xóa 1 môn học thì kể như tiêu ! 2 cách đều chuối !!! tốt nhất xé làm 3 lớp subject,student,Mark
    Subject {name, mark, ID}
    Student{ID, Name}
    Mark{StudentID,SubjectID,Mark}
    Mà em tính làm quản lý điểm à

  5. #5
    Ngày gia nhập
    06 2007
    Nơi ở
    TP.HCM
    Bài viết
    113

    Trích dẫn Nguyên bản được gửi bởi nhc1987 Xem bài viết
    Cách 1 : ko có tính mở rộng
    Cách 2 : mở rộng khó, hơn nữa nhìn ... rất vô duyên :">

    Nói thật, chả cách nào trên 2 cái trên hay cả :P

    Theo thiển ý của nhc thì làm thía này :

    Subject {name, mark}
    Physics : Subject
    Maths : Subject
    Chemistry : Subject
    Student {name, address, ..., list<Subject>}
    Mấy cái OOP này chắc phải học từ nhc nhiều

    Gác Kiếm

  6. #6
    Ngày gia nhập
    09 2006
    Nơi ở
    /usr/share/.hack@
    Bài viết
    1,433

    Mặc định Đánh giá tính mở rộng của Class trong lập trình C#

    Trích dẫn Nguyên bản được gửi bởi phamtiensinh Xem bài viết
    Uh , viết như XCROSS thì mỗi khi thêm 1 môn học hay xóa 1 môn học thì kể như tiêu ! 2 cách đều chuối !!! tốt nhất xé làm 3 lớp subject,student,Mark
    Subject {name, mark, ID}
    Student{ID, Name}
    Mark{StudentID,SubjectID,Mark}
    Mà em tính làm quản lý điểm à
    Nhìn là đã biết chuối rồi mà anh ^^!
    Cái này đâu có tình OOP gì hết
    None!

  7. #7
    Ngày gia nhập
    11 2007
    Bài viết
    294

    Trích dẫn Nguyên bản được gửi bởi nhc1987 Xem bài viết
    Subject {name, mark}
    Physics : Subject
    Maths : Subject
    Chemistry : Subject
    Student {name, address, ..., list<Subject>}
    Chưa nghĩ được gì hay hơn nhưng cái này của nch hơi ... thừa .
    1 - subject đã có name rồi cần gì phải inherit để làm giề nữa
    2 - ko có ID thì sau này lưu xong rồi quản lý thế nào ?
    dark nghĩ chỉ cần sửa cái subject thành {ID,Name,Mark}
    Mấy physics,math.. ko cần .
    Thực ra mấy cái đó là object chứ ko thể là class được .Tại vì các class đó(tạm gọi là class) ko có điểm gì để có thể phân biệt được với nhau cả .Nó chỉ là object của class Subject .

    P/S: Lúc nào nghĩ ra viết tiếp .Rượu vào say rồi :((.
    Is the moon rising...

  8. #8
    Ngày gia nhập
    10 2007
    Nơi ở
    HCMUNS
    Bài viết
    459

    1. Subject là Base class. Nó làm gì có name.
    2. Id là vấn đề thuộc về CSDL, ko hề liên quan gì đến thiết kế lớp cả !

    Nếu làm như dark thì thử câu này xem :
    hãy xuất ra các môn học và điểm số của môn học của một học sinh nào đó bằng Tiếng Việt (giả sử học sinh đó đăng kí 3 môn : Maths, Physics, Chemistry).
    Đề đơn giản vậy thôi.
    Keep moving forward!

    ... Retired ...

  9. #9
    Ngày gia nhập
    11 2007
    Bài viết
    294

    Eo,câu đơn giản của nhc khó phết .
    Cách 1 : Cách củ chuối
    Tách name thành ename và vname :P.
    Cách 2 : Bỏ name,chỉ để lại ID.
    Xé lớp subject thành 2 lớp
    Subject {ID,list<Name>,mark}
    Name {ID,Name,Language}
    Chắc cái này đáp ứng được iu cầu của nhc
    Đã được chỉnh sửa lần cuối bởi darkan : 31-01-2008 lúc 09:18 PM. Lý do: thêm cho chi tiết :D
    Is the moon rising...

  10. #10
    Ngày gia nhập
    10 2007
    Nơi ở
    HCMUNS
    Bài viết
    459

    Đoạn quan trọng thì lại ko thấy đâu. Đoạn code xuất thông tin đâu ? Dark demo đoạn code đó xem !

    Còn cái vụ name đó chả ai làm vậy bao giờ.

    À góp ý lần nữa : đừng xài nhiều emoticon trong bài viết quá. Khó nhìn lắm.
    Keep moving forward!

    ... Retired ...

Các đề tài tương tự

  1. Algorithm Chèn Class Trong Class C#?
    Gửi bởi satthuit trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 4
    Bài viết cuối: 08-01-2012, 12:09 PM
  2. class bên trong 1 class và cấp phát bộ nhớ
    Gửi bởi hope2907 trong diễn đàn Nhập môn lập trình C#, ASP.NET
    Trả lời: 0
    Bài viết cuối: 03-10-2011, 04:46 PM
  3. Phân biệt CLASS - OBJECT - INSTANCE, trong đoạn code này, cái nào là intstance, object, class ?
    Gửi bởi megaboyvn trong diễn đàn Thắc mắc lập trình ASP.NET
    Trả lời: 8
    Bài viết cuối: 04-08-2011, 03:45 PM
  4. Lỗi: error C2440: 'initializing' : cannot convert from 'class xxx *' to 'class xxx *' sửa như thế nào?
    Gửi bởi Nupakachy trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 0
    Bài viết cuối: 16-06-2011, 08:54 PM
  5. Cách lấy giá trị biến từ class này sang class khác trong lập trình C#
    Gửi bởi phongk20 trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 4
    Bài viết cuối: 13-03-2011, 05:19 PM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn