Thứ Sáu, 3 tháng 4, 2015

SOLID – 5 nguyên tắc cơ bản trong programming

SOLID là 5 nguyên tắc đầu tiên và cơ bản mà bất cứ programmer nào cũng cần phải hiểu rõ:
  1. S – SRP – Single Responsibility Principle
  2. O – OCP – Open/Closed Principle
  3. L – LSP – Liskop Substitution Principle
  4. I – ISP – Interface Segregation Principle
  5. D – DIP – Dependency Inversion Principle
Những nguyên tắc này tuy rất khó nhớ tên nhưng ít nhiều ta đều tiếp xúc trong công việc hàng ngày. Vì vậy nhận ra khi nào ta đang follow nguyên tắc gì sẽ rất có lợi cho công việc.
Ý nghĩa của từng nguyên tắc như sau:
  1. SRP

    – 1 piece of software chỉ nên thực hiện 1 mục đích, 1 trách nhiệm duy nhất. Về cơ bản, các đơn vị cấu trúc của program gồm có:
    • Statement
    • Code block
    • Method/function
    • Class/Interface
    • Module
    • Project/Library
    • Solution
    Đối với mỗi level, chúng ta cần phải rất rõ ràng về công việc mà chúng thực hiện. Điều này giúp cho code dễ đọc, program dễ hiểu và dễ maintain. Sau khi viết code xong, khi đọc lại hoặc khi ng khác đọc sẽ dễ dàng follow đc vấn đề.
    Ví dụ 1

    Dòng code trên làm 2 việc: in ra index hiện tại và tăng nó lên 1. Đối với ng viết, do đã là thói quen nên họ dễ dàng nhận ra giá trị của biến i sau dòng này. Nhưng đối với ng khác, rất dễ xảy ra nhầm lẫn.
    Ví dụ 2

    Đoạn code trên có 2 vấn đề:
    1. Trong using block, thực hiện 2 việc là insert object và gọi messageService. Mặc dù code chạy bình thường nhưng đây vẫn là bad practice, messageService cần phải nằm ngoài using ctx.
    2. Trong function Insert thực hiện 2 nhiệm vụ khác nhau. Nếu trong tương lai phát sinh ra nhu cầu Insert nhưng ko kèm notify cho messageService thì function này sẽ phải sửa lại (cùng với tất cả những nơi đã dùng tới nó)
    Cứ tiếp tục như thế, đôi khi chúng ta cảm thấy sẽ “tiện lợi” ghi gộp nhiều thứ lại với nhau. Nhưng thực tế sẽ tạo ra những vấn đề tiềm ẩn cho sau này (technical debt)
  2. OCP

    open for extension but close for modification? tức là sao?
    Nôm na là ta phải thiết kế software sao cho nó có thể mở rộng dễ dàng mà ko cần phải đập đi làm lại. Còn gì bực bội hơn khi được giao viết thêm functionality cho 1 hệ thống mà phát hiện ra cần phải sửa rất nhiều mới support đc chức năng ABC? Điều này cũng giống như thiết kế 1 chiếc xe hơi với các bộ phận tiêu chuẩn có thể dễ dàng thay thế hoặc nâng cấp mà ko cần phải chế tạo lại cả chiếc xe.
    Nguyên tắc này thường đc triển khai dựa trên tính kế thừa và tính đa hình của OOP như trong sơ đồ sau:
    superhero
    Ở đây tôi đã define Superman và Spiderman, và method Fight của 2 entity này đã fixed và không thay đổi được, tức là Closed. Vậy hệ thống có Open hay không? Làm gì để tùy chỉnh?
    • có thể extend và override method của class cũ, chẳng hạn tạo class AmazingSpiderman -> Spiderman với khả năng Fight more amazing
    • extend từ Abstract class và implement abstract method Fight
    Như vậy hệ thống đảm bảo đc tính OCP.
  3. LSP

    có khi nào bạn thấy ko hài lòng về 1 property nào đó của 1 class và viết 1 class con để modify property đó? chẳng hạn property của base class chỉ trả về integer từ 1..10, bạn subclass để nó trả về 1..100? Như vậy là bạn đang violate nguyên tắc LSP.
    Lý do: khi đoạn code nào đó sử dụng đến property này với understanding là nó sẽ trả về 1..10, sẽ bị surprised khi nó trả về 1..100 và ko thể handle từ 11..100
    Ví dụ sau ko hoàn toàn về LSP nhưng cũng cho thấy sự vi phạm tính đa hình của class

    Đoạn code trên đã phải convert đối tượng về một subtype để thực hiện method cần thiết.
  4. ISP

    khi bạn implement 1 interface mà có những method bạn ko dùng đến, đó là dấu hiệu của problem.

    Có thể thấy Striker sẽ ko implement đc method Catch. Và nếu ta gọi Player.Catch() có thể sẽ dẫn đến runtime expception. Vì vậy việc class Striker ko thể implement đc method Catch cho thấy 1 technical debt.

    Như vậy, rõ ràng mọi method trong class đều có ý nghĩa rất rõ ràng, ko lỗi.
  5. DIP

    – hmm… đây là 1 nguyên tắc về decoupled, thuộc về design nhiều hơn là coding, vì vậy tương đối khó để nắm bắt. Có thể liên tưởng qua ví dụ thực tế như sau:
    Ex: giả sử A làm ăn với B, A mua dịch vụ do B cung cấp. Đôi khi B ko thực hiện đúng trách nhiệm của mình, A mặc dù bực bội về việc đó, nhưng đã ký kết làm ăn nên ko thể đổi được, và cũng ko có đủ khả năng tìm đối tác khác. Như vậy A đã phụ thuộc chặt chẽ vào B.
    Tuy nhiên, nếu ban đầu A ko trực tiếp làm việc với B, mà thông qua trung gian X. A đưa ra yêu cầu dành cho nhà phân phối của mình và X sẽ tìm người đáp ứng được nhu cầu đó, giả sử ban đầu là B. Nếu sau đó B ko thực hiện đúng trách nhiệm, X sẽ thay B bằng nhà cung cấp C. Như vậy việc sử dụng dịch vụ của A sẽ ko bị gián đoạn và A cũng ko cần làm việc trực tiếp với B hay C.
    Điều này minh họa trong code như sau


    Ta có thể thấy Messi phụ thuộc hoàn toàn vào Xavi. Có thể sửa lại như sau
Tóm lại, các principle trên có tác dụng chính là giúp chúng ta nắm được và dự đoán được các vấn đề tiềm ẩn của program thông qua các dấu hiệu vi phạm 5 principle này để giải quyết chúng 1 cách triệt để.

Thứ Ba, 24 tháng 3, 2015

Tạo map cho game bằng Tiled Map Editor

Bài viết hướng dẫn chi tiết sẽ được cập nhập trên 
Page: https://www.facebook.com/hoclaptrinh.it
Websites: http://www.studycoding.net/




- Hướng dẫn tạo Map bằng phần mềm Tile Editor

B1: Vào trang chủ để download tool
Link: http://www.mapeditor.org/download.html
B2: Mình sẽ hướng dẫn các bạn tạo map của
game Kingdom Rush. Vào google search ít
thông tin về game này nhé!
Chúng ta sẽ tạo map cho game,
- Vào trang chủ của Kingdom rush để lấy hình
của map

Link map của Kingdom Rush:
http://kingdomrushtd.wikia.com/wiki/Category:Levels
B3: khởi động tool Tiled để tạo map.
ở đây mình tạo game với kích thước 1280x768
~~ kích thước của map là 128x77 
với mỗi tiled là 10x10 pixcel
B4: Save file .tmx để load vào code 
** Bài hôm sau sẽ load vào code tạo project game 

Thứ Bảy, 17 tháng 1, 2015

Tài liệu Lập trình iOS Tiếng Việt đầy đủ TTTH đại học khoa học tự nhiên

Toàn bộ silde học ios của KHTN, Tài liệu Lập trình iOS Tiếng Việt đầy đủ TTTH đại học khoa học tự nhiên:

  • Bai 1 - Gioi thieu tong quan ve lap trinh ung dung tren thiet bi di dong su dung iOS
  • Bai 2 - Thiet lap moi truong lap trinh
  • Bai 3 - Tai khoan Apple Developer, Build App, Submit App, AppStore
  • Bai 4 - Gioi thieu ve Objective-C
  • Bai 5 - Numbers, Strings and Collections
  • Bai 6 - Label, Button, TextField, Slider, Switch, Page Control
  • Bai 7 - Memory Management
  • Bai 8 - Date picker, Picker view, Web view, Toolbar, AD banner view
  • Bai 9 - Navigation controller, Tabbar controller, Search bar
  • Bai 10 - Page control, Image view, Text view, Scroll view
  • Bai 11 - Table View, Table View Cell
  • Bai 12 - Lam viec voi file tren iOS
  • Bai 13 - Tuy bien giao dien trong lap trinh ung dung tren iOS
  • Bai 14 - Multimedia
  • Bai 15 - Address book
  • Bai 16 - Thread - Backgound - Multitasking
  • Bai 17 - SQLite
  • Bai 18 - Core Location Framework
  • Bai 19 - Google Service API
  • Tai Lieu Huong Dan - Mobile-PC-Laptop


Download: Here
Theo dõi thêm trên page: Học Lập Trình 
Link fb: https://www.facebook.com/hoclaptrinh.it

Thứ Ba, 6 tháng 1, 2015

Socket Android Client to PC Server C#

Using AsynCallback C#
Android Client connect Server C#

Download source code: Click Here


c# socket multi client,
socket c# example,
socket server c#,
socket c# tutorial,
asynchronous socket in c#,
c# socket multiple clients,
c# socket server multiple clients,

Thứ Bảy, 3 tháng 1, 2015

Bắt đầu học lập trình Android

Tổng hợp bài tập thực hành Android cho người mới bắt đầu. Luyện tập từ căn bản nhất. Bổ sung thêm tài liệu Java Core.



Download: tại đây

Core Java: tại đây

Nguồn: https://duythanhcse.wordpress.com/


Contents
Bài tập 1: Làm quen với môi trường phát triển điện thoại di động ..........................................................2

Bài tập 2: Thao tác với Android Virtual Device và DDMS .....................................................................5

Bài tập 3: Cách tạo Android Project và tìm hiểu cấu trúc bên trong của một Android Project..............14

Bài tập 4: Cách sửa một số lỗi thường gặp trong Android Project.........................................................22

Bài tập 5: Tìm hiểu vòng đời của một Ứng Dụng Android....................................................................24

Bài tập 6: Phân biệt Foreground Lifetime và Visible Lifetime ..............................................................31

Bài tập 7: Làm quen với các Layout trong Android...............................................................................40

Bài tập 8: Các kiểu lập trình sự kiện trong Android...............................................................................51

Bài tập 9: Thực hành về Toast Notification và Alert Dialog..................................................................69

Bài tập 10: Sử dụng TextView, EditText và Button trong Android.......................................................72

Bài tập 11: Sử dụng Checkbox và RadioButton trong Android ......................................................80

Bài tập 12: Ví dụ tổng hợp TextView, EditText, CheckBox, Button và ImageButton

trong Android .......................................................................................................................................89

Bài tập 13: Thực hành về ListView trong Android.........................................................................103

Bài tập 14: Thực hành về Custom Layout cho ListView trong Android......................................125

Bài tập 15: Thực hành về Spinner trong Android ..........................................................................136

Bài tập 16: Kết hợp Spinner với ListView trong Android..............................................................139

Bài tập 17: Thực hành về AutocompleteTextView và MultiAutocompleteTextView.................150

Bài tập 18: Cập nhật DataSource cho AutocompleteTextView lúc Runtime..............................154

Bài tập 19: Thực hành Gridview trong Android.............................................................................167

Bài tập 21: Thực hành về Tab Selector trong Android ..................................................................175

Bài tập 22: Thực hành về Menu trong Android..............................................................................184

Bài tập 23: Thực hành về Context Menu trong Android...............................................................193

Bài tập 24: Thực hành về Intent trong Android.............................................................................196

Bài tập 25: Tiếp tục củng cố kiến thức Intent, ví dụ tổng hợp Quản Lý Nhân Viên ...................216

Bài tập 26: Dùng Implicit Intent để viết chương trình gọi điện thoại và nhắn tin SMS ...........263

Bài tập 27: Đa ngôn ngữ trong Android ..........................................................................................274

Bài tập 28: Xử lý tập tin trong Android...........................................................................................279

Bài tập 29: XML Parser trong Android...........................................................................................293

Bài tập 30: Thực hành về Shared Preferences................................................................................299

Bài tập 31: Cách sử dụng SQLite trong Android ............................................................................312

Bài tập 32: Tiếp tục củng cố kiến thức SQLite, ví dụ tổng hợp quản lý sách...............................320

Bài tập 33: Sử dụng ContentProvider trong Android....................................................................345

Bài tập 34: đa tiến trình trong Android (Multi-Threading).........................................................354

Thứ Năm, 1 tháng 1, 2015

Android 5.0 Example


Những điểm mới trong Android 5.0
• Giao diện Material Design.
• Màu sắc của thanh trạng thái có thể thay đổi được.
• Cho phép hiển thị notifications ở màn hình khóa.
• Cải thiện Pin.
• Chuyển sang máy ảo Android Runtime (ART) thay vì máy ảo Dalvik cũ.

Video demo:
Download source: http://goo.gl/NfMsfV

Chủ Nhật, 28 tháng 12, 2014

[Module 4] Học lập trình Android KHTN

Module 4 gồm các phần nâng cao của học lập trình android


Bài 1 - Khai thác tài nguyên Internet
Bài 2 - Kết nối WebService
Bài 3 - Đọc ghi dữ liệu XML - JSON
Bài 4 - Google Map
Bài 5 - Các điều khiển đa truyền thông
Bài 6 - Sensor
Bài 7 - Telephony & SMS
Bài 8 - Google Cloud Messaging
Bài 9 - Ứng dụng Widget

 Dơwnload:    ▶ Android module 4: Tải xuống 


o Lập trình Android trung tâm tin học KHTN
 Dơwnload: