2011-09-10 30 views
7

Tôi đang lừa xung quanh với một số lập trình cơ bản trong Android bằng Eclipse. Tôi hiện đang xem qua một cuốn sách và chơi với một số mã mẫu được viết trong cuốn sách.lập trình hướng đối tượng android

Tôi đã nhận thấy rằng trong cuốn sách cụ thể này, tất cả các ví dụ cho đến nay đều có tốc độ trong Hoạt động chính. Tôi không tin điều này là thực hành lập trình hướng đối tượng rất tốt vì tôi đến từ một nền Java truyền thống.

Đây có phải là thực tiễn phổ biến cho nền tảng di động không? Tất cả các lớp học có nên được chứa trong các tệp của riêng chúng không?

+0

Bạn có thể đăng một số ví dụ để minh họa tốt hơn câu hỏi của mình không? – elevine

+1

OOP không phải lúc nào cũng là thực hành tốt nhất; và chia nhỏ thành nghìn tệp không phải lúc nào cũng tạo ra một chương trình OOP tốt. –

Trả lời

6

Tất cả các lớp học không nên được chứa trong các tệp của riêng chúng?

Không nhất thiết phải là Android Activity là lớp 'trường hợp đặc biệt'. Nếu bạn chưa thực hiện đã có, tôi muốn khuyên bạn nên đọc Application Fundamentals và đặc biệt là phần về 'hoạt động' dưới Application components ...

Một hoạt động đại diện cho một màn hình duy nhất với một giao diện người dùng. Ví dụ: một ứng dụng email có thể có một hoạt động hiển thị danh sách các email mới, một hoạt động khác để soạn email và một hoạt động khác để đọc email. Mặc dù các hoạt động làm việc cùng nhau để tạo thành trải nghiệm người dùng gắn kết trong ứng dụng email, mỗi hoạt động độc lập với những người khác. Như vậy, một ứng dụng khác có thể bắt đầu bất kỳ một trong các hoạt động này (nếu ứng dụng email cho phép nó). Ví dụ: ứng dụng máy ảnh có thể bắt đầu hoạt động trong ứng dụng email soạn thư mới, để người dùng có thể chia sẻ ảnh.

Lưu ý phần văn bản mà tôi đã tô đậm. Điểm chính là bản thân số Activity không phải là ứng dụng hoàn chỉnh và nếu được cho phép, bất kỳ ứng dụng của bên thứ ba nào cũng có khả năng gọi một số Activity trong một trong các ứng dụng của bạn. Do đó, việc tự tạo Activity là tự chủ càng tốt. Một ví dụ cụ thể là việc sử dụng một cái gì đó giống như một AsyncTask cung cấp các phương thức để thực hiện một luồng nền cũng như thao tác với giao diện người dùng - lồng một lớp riêng mở rộng AsyncTask là khá phổ biến và đơn giản hóa mã. Các lớp lồng ghép mở rộng BroadcastReceiver cũng phổ biến vì cùng một lý do.

Điều đó nói rằng, không có gì sai khi sử dụng các tệp lớp Java riêng biệt cho các lớp trình trợ giúp POJO, nó chỉ đi đến mức độ phức tạp của ứng dụng của bạn. AsyncTask là một lớp đặc biệt nếu được định nghĩa trong một tệp lớp riêng biệt, hãy thử nó và bạn sẽ thấy ý tôi là gì. :-)

+3

Thực tế là hoạt động gần như là một ứng dụng của chính nó nên ngụ ý hoàn toàn trái ngược với nó được hoàn toàn chứa trong một lớp lớn. Bất kỳ ứng dụng nào ít nhiều là "khép kín", điều này không có nghĩa là tất cả các mã phải nằm trong một lớp duy nhất. Như bạn đã trích dẫn, * "các hoạt động phối hợp với nhau để tạo thành một trải nghiệm người dùng gắn kết trong (an) ứng dụng" *, nó thực sự được mong đợi rằng các phần của giao diện người dùng và chức năng được chia sẻ giữa các hoạt động. – Groo

+1

@Groo: "Thực tế là Hoạt động gần như là một ứng dụng của chính nó ..." - không có điều này là chính xác những gì nhiều người mới tin vào Android, tức là họ nghĩ 'Hoạt động' đồng nghĩa với 'ứng dụng'. Trong thực tế, một ứng dụng có thể có hàng tá thành phần (Hoạt động, Dịch vụ, BroadcastReceivers, Nhà cung cấp nội dung). Tôi không gợi ý rằng tất cả các hoạt động nên chứa mọi thứ - quan điểm của tôi là các hoạt động thường là các giao diện đơn giản 'trang' đơn giản thực hiện một hành động rất đơn giản và, như vậy, thường có thể chứa mọi thứ họ cần. Nếu có nhu cầu chia sẻ mã thì các lớp trợ giúp có thể được sử dụng. – Squonk

+0

+1 Ok, tôi đoán tôi đã đọc bài đăng quá hời hợt, bây giờ tôi nhận được nó: bạn gọi một "hoạt động" khép kín "như là một phần của một ứng dụng hoàn chỉnh. Đúng là bạn không cần chia nhỏ mọi phần của ứng dụng thành nhiều tệp (hoặc các lớp), nhưng khi thực hiện lập trình TDD, thường rất tốt để có thể kiểm tra từng thành phần nhỏ nhất một cách riêng biệt, vì vậy tôi có xu hướng đi vào hướng đó hầu hết thời gian. Nhưng một lần nữa, TDD cũng không phải là viên đạn bạc. Và tôi sử dụng các lớp riêng để phân hủy các phần phức tạp của chức năng của một lớp, và sau đó cấu trúc lại chúng khi cần (và nếu). – Groo

5

OO sắp đặt chức năng vào lớp học. Cách bạn viết các lớp đó định nghĩa nếu nó là OO tốt hay không (mặc dù điều này có thể gây tranh cãi). Cho dù tất cả các lớp này nằm trong một hoặc một vài tệp hay mỗi lớp đều có tệp riêng của nó, là vấn đề về sở thích và không trực tiếp là vấn đề OO.

Vì đây là một cuốn sách với (tôi nghĩ) các mẫu nhỏ, nó có thể dễ dàng đọc theo cách của nó, hơn khi tất cả các lớp nằm trong các tệp riêng biệt.

0

Nếu bạn sử dụng OOP thích hợp, bạn có thể tạo các ứng dụng dựa trên Mẫu nhanh hơn rất nhiều & một cách hiệu quả.

Bạn nên cố gắng thực hiện việc này ví dụ nếu bạn có một ứng dụng cơ sở dữ liệu chung và nhiều cơ sở dữ liệu có thể được sử dụng với những thay đổi nhỏ.

Các vấn đề liên quan