Chủ Nhật, 7 tháng 6, 2015

Giới thiệu về Lập trình hướng Đối tượng (Object-oriented Programming)

Lập trình hướng Đối tượng (OOP) là một phương pháp thiết kế và phát triển phần mềm. Những ngôn ngữ OOP không chỉ bao gồm cú pháp và một trình biên dịch (compiler) mà còn có một môi trường phát triển toàn diện. Môi trường này bao gồm một thư viện được thiết kế tốt, thuận lợi cho việc sử dụng các đối tượng.


Đối với một ngôn ngữ lập trình hỗ trợ OOP thì việc triển khai kỹ thuật lập trình hướng đối tượng sẽ dễ dàng hơn.  Kỹ thuật lập trình hướng đối tượng cải tiến việc phát triển các hệ thống phần mềm. Kỹ thuật ấy đề cao nhân tố chức năng (fucntionality) và các mối quan hệ dữ liệu.

OOP là phương thức tư duy mới để giải quyết vấn đề bằng máy tính. Để đạt kết quả, lập trình viên phải nắn vấn đề thành một thực thể quen thuộc với máy tính. Cách tiếp cận hướng đối tượng cung cấp một giải pháp toàn vẹn để giải quyết vấn đề.

Hãy xem xét một tình huống cần được triển khai thành một hệ thống trên máy vi tính: việc mua bán xe hơi. Vấn đề vi tính hóa việc mua bán xe hơi bao gồm những gì?

Những yếu tố rõ ràng nhất liên quan đến việc mua bán xe hơi là:
1)   Các kiểu xe hơi (model).
2)   Nhân viên bán hàng.
3)   Khách hàng.

Những hoạt động liên quan đến việc mua bán:
1)   Nhân viên bán hàng đưa khách hàng tham quan phòng trưng bày.
2)   Khách hàng chọn lựa một xe hơi.
3)   Khách hàng đặt hóa đơn.
4)   Khách hàng trả tiền.
5)   Chiếc xe được trao cho khách hàng.

Mỗi vấn đề được chia ra thành nhiều yếu tố, được gọi là các Đối tượng (Objects) hoặc các Thực thể (Entities). Chẳng hạn như ở ví dụ trên, khách hàng, xe hơi và nhân viên bán hàng là những đối tượng hoặc thực thể.

Lập trình viên luôn luôn cố gắng tạo ra những kịch bản (scenarios) thật quen thuộc với những tình huống đời sống thực. Bước thứ nhất trong đường hướng này là làm cho máy tính liên kết với những đối tượng thế giới thực.

Tuy nhiên, máy tính chỉ là một cỗ máy. Nó chỉ thực hiện những công việc được lập trình mà thôi. Vì thế, trách nhiệm của lập trình viên là cung cấp cho máy tính những thông tin theo cách thức mà nó cũng nhận thức được cùng những thực thể như chúng ta nhận thức.

Đó chính là lãnh vực của kỹ thuật hướng đối tượng. Chúng ta sử dụng kỹ thuật hướng đối tượng để ánh xạ những thực thể chúng ta gặp phải trong đời sống thực thành những thực thể tương tự trong máy tính.

Phát triển phần mềm theo kỹ thuật lập trình hướng đối tượng có khả năng giảm thiểu sự lẫn lộn thường xảy ra giữa hệ thống và lãnh vực ứng dụng.

Lập trình hướng đối tượng đề cập đến dữ liệu và thủ tục xử lý dữ liệu theo quan điểm là một đối tượng duy nhất. Lập trình hướng đối tượng xem xét dữ liệu như là một thực thể hay là một đơn vị độc lập, với bản chất riêng và những đặc tính của thực thể ấy. Bây giờ chúng ta hãy khảo sát những hạn từ ‘đối tượng’ (object), ‘dữ liệu’ (data) và ‘phương thức’ (method).

Có nhiều loại đối tượng khác nhau. Chúng ta có thể xem các bộ phận khác nhau trong một cơ quan là các đối tượng. Điển hình là một cơ quan có những bộ phận liên quan đến việc quản trị, đến việc kinh doanh, đến việc kế toán, đến việc tiếp thị … Mỗi bộ phận có nhân sự riêng, các nhân sự được trao cho những trách nhiệm rõ ràng. Mỗi bộ phận cũng có những dữ liệu riêng chẳng hạn như thông tin cá nhân, bảng kiểm kê, những thể thức kinh doanh, hoặc bất kỳ dữ liệu nào liên quan đến chức năng của bộ phận đó. Rõ ràng là một cơ quan được chia thành nhiều bộ phận thì việc quản trị nhân sự và những hoạt động doanh nghiệp dễ dàng hơn. Nhân sự của cơ quan điều khiển và xử lý dữ liệu liên quan đến bộ phận của mình.

Chẳng hạn như bộ phận kế toán chịu trách nhiệm về lương bổng đối với cơ quan. Nếu một người ở đơn vị tiếp thị cần những chi tiết liên quan đến lương bổng của đơn vị mình, người ấy chỉ cần liên hệ với bộ phận kế toán. Một người có thẩm quyền trong bộ phận kế toán sẽ cung cấp thông tin cần biết, nếu như thông tin ấy có thể chia sẻ được. Một người không có thẩm quyền từ một bộ phận khác thì không thể truy cập dữ liệu, hoặc không thể thay đổi làm hư hỏng dữ liệu. Ví dụ này minh chứng các đối tượng là hữu dụng trong việc phân cấp và tổ chức dữ liệu.

Hình 1.1 Minh họa cấu trúc của một cơ quan điển hình.


  
Hình 1.1

Khái niệm về đối tượng có thể được mở rộng đến hầu hết các lãnh vực đời sống, và hơn nữa, đến thế giới lập trình. Bất kỳ ứng dụng nào đều có thể được định nghĩa theo hạn từ thực thể hoặc đối tượng để tạo ra tiến trình xử lý mô phỏng theo tiến trình xử lý mà con người nghĩ ra.
Phương pháp giải quyết ‘top-down’ (từ trên xuống) cũng còn được gọi là ‘lập trình hướng cấu trúc’ (structured programming). Nó xác định những chức năng chính của một chương trình và những chức năng này được phân thành những đơn vị nhỏ hơn cho đến mức độ thấp nhất. Bằng kỹ thuật này, các chương trình được cấu trúc theo hệ thống phân cấp các module. Mỗi một module có một đầu vào riêng và một đầu ra riêng. Trong mỗi module, sự điều khiển có chiều hướng đi xuống theo cấu trúc chứ không có chiều hướng đi lên.
Phương pháp OOP cố gắng quản lý việc thừa kế phức tạp trong những vấn đề đời thực. Để làm được việc này, phương thức OOP che giấu một vài thông tin bên trong các đối tượng. OOP tập trung trước hết trên dữ liệu. Rồi gắn kết các phương thức thao tác trên dữ liệu, việc này được xem như là phần thừa kế của việc định nghĩa dữ liệu. Bảng 1.1 minh họa sự khác biệt giữa hai phương pháp:

Phương pháp Top-Down
OOP
Chúng ta sẽ xây dựng một khách sạn.
Chúng ta sẽ xây dựng một tòa nhà 10 tầng với những dãy phòng trung bình, sang trọng, và một phòng họp lớn.
Chúng ta sẽ thiết kế các tầng lầu, các phòng và phòng họp.
Chúng ta sẽ xây dựng một khách sạn với những thành phần trên.


Bảng 1.1 Một ví dụ về hai phương pháp giải quyết OOP và Structured

Read More

Thứ Năm, 4 tháng 6, 2015

Câu chuyện nên bắt đầu học lập trình từ đâu ?

Chào các bạn,
Rất nhiều bạn  nhờ tư vấn là các bạn có đam mê CNTT nhưng không biết bắt đầu từ đâu.
Trong chuỗi các bài viết này, qua việc sưu tầm cũng như từ kinh nghiệm của tôi, tôi xin phép được chia sẻ những kinh nghiệm của mình để có thể giúp các bạn có được những định hướng cho việc học lập trình của mình.

1. Lập trình là gì ?

Lập trình là công việc tạo ra một sản phẩm, một thành quả, và con đường trở thành lập trình viên sẽ rõ ràng hơn khi bạn biết rõ thứ mà các bạn sẽ tạo ra. Nếu mục tiêu của bạn chỉ là “học viết code”, mà không có định hướng rõ ràng về thứ mà các bạn sẽ làm ra và cách chúng sẽ làm cho cuộc sống tốt đẹp hơn, bạn sẽ thấy con đường phía trước đầy chông gai và khó nhọc.
Lập trình là việc xây dựng ra các sản phẩm CNTT để phục vụ cho cuộc sống hằng ngày, từ các sản phẩm web, các ứng dụng máy tính, ứng dụng di động, các phần mềm, các trò chơi…

2. Bạn muốn lập trình cái gì ?

Vậy, bạn muốn lập trình thứ gì? Một website, một trò chơi, hay một ứng dụng iPhone? Hoặc có thể bạn muốn xây dựng hẳn một công ty khởi nghiệp đáng giá hàng triệu USD? Đó cũng có thể là một sản phẩm tương tác mang tính nghệ thuật. Hay bạn muốn sử dụng kiến thức của mình để làm các sếp hài lòng và dành thời gian để làm những việc khác? Hoặc đơn giản bạn chỉ muốn kiếm việc dễ dàng hơn, muốn bổ sung vào hồ sơ của mình những thuật ngữ to tát, hoặc hoàn thiện chương trình học của mình. Tất cả những lí do trên đều có thể trở thành mục tiêu của bạn. Nhưng trên hết, bạn cần phải biết mình cần gì, và hãy học tập phục vụ cho điều đó.
Bạn nên xác định rõ mình sẽ làm gì trước khi học lập trình - Ảnh: ST
Bạn nên xác định rõ mình sẽ làm gì trước khi học lập trình – Ảnh: ST

3. Không có gì là bí ẩn về lập trình

Lập trình cũng là một kỹ năng, giống như những việc khác. Giống như việc học ngoại ngữ, lập trình viên cũng phải học những mệnh đề ngữ pháp và từ vựng. Lập trình cũng giống như toán, các bạn sẽ phải theo các bước trong quy trình để giải một đề bài.

4. Không có gì chạy ngay từ lần thử đầu tiên

… và chưa chắc đã chạy trong lần thứ hai hoặc thứ 3
Khi bạn mới học lập trình, bạn sẽ gặp phải tính huống sau: bạn nghĩ rằng tất cả các dòng code đều hoàn hảo và bạn đã kiểm tra kỹ tất cả mọi thứ, nhưng code của bạn không hề chạy! Bạn không biết bắt đầu từ đâu để sửa, và những dòng thông báo (nếu may mắn chúng sẽ được hiện lên màn hình) khó hiểu. Bạn có thể nghĩ tới việc từ bỏ tại đây, bạn nghĩ rằng sẽ không bao giờ có thể tìm ra câu trả lời, bạn không thể có lời giải.
Không phải lúc nào code cũng chạy - Ảnh: ST
Không phải lúc nào code cũng chạy – Ảnh: ST
Nhưng điều này rất phổ biến với lập trình viên ở bất kỳ trình độ nào. Nó không phản ánh trí tuệ của bạn, cũng như ảnh hướng tới khả năng khám phá công nghệ cũng như cuộc đời lập trình sau này của bạn. Điều này sẽ xảy ra thường xuyên với những người mới, và cả với những lập trình viên chuyên nghiệp. Sự khác biệt thực sự lại là cách mà mọi người xử lí nó.
Một điểm khác biệt giữa những lập trình ít kinh nghiệm và những người lâu năm trong nghề khi gặp khó khăn là niềm tin. Niềm tin vào việc bản thân họ sẽ tìm ra được cách khắc phục cũng như tìm ra điều chưa đúng trong dòng code. Họ cũng tin rằng sẽ có nhiều hơn một cách để thực hiện mục tiêu. Giải pháp để biến những dòng code vô dụng thành hữu ích có thể không rõ ràng, những với sự kiên trì, họ sẽ tìm ra.

5. Sẽ có ai đó luôn luôn nói rằng những gì bạn làm là sai

Những tranh cãi xung quanh việc dùng dấu ngoặc nhọn ( } ) ở cuối dòng lệnh hay ở đầu dòng tiếp theo sẽ diễn ra liên miên. Việc này cũng xảy ra với việc dùng phím tab để lùi vào khi viết code. Đôi khi bạn cũng bị cuốn vào những tranh cãi trái chiều dạng như “phải comment cho từng hàm khi viết code” và “code tốt là không cần dùng comment”.
Có rất nhiều phong cách trình bày code, bạn có thể chọn lấy cách phù hợp với mình - Ảnh: ST
Có rất nhiều phong cách trình bày code, bạn có thể chọn lấy cách phù hợp với mình – Ảnh: ST
Tất cả những tranh cãi, lời khuyên này đều sẽ làm phiền bạn. Nhưng thực sự thì không bao giờ có một chuẩn mực rõ ràng cho việc lập trình. Rất nhiều lập trình viên đã lựa chọn cách làm việc mà họ cảm thấy phù hợp nhất với mình, nhưng đó chưa chắc đó đã là con đường duy nhất. Việc đối mặt với nhiều người trong nghề và nghe những nhận xét đúng sai của họ về việc lập trình của bạn là một việc vô cùng vất vả khi bạn bắt đầu sự nghiệp.
Nếu bạn làm trong một nhóm lập trình, sẽ có một vài người sẽ gặp phải khó khăn khi tiếp nhận các dòng code từ bạn. Đôi khi họ đúng, những cũng có khi, họ rất cổ hủ và bắt bạn phải sửa theo cách viết của cả nhóm.
  • Sẽ có những người nhận xét bạn không phải là lập trình viên thực thụ
  • Viết HTML không phải là lập trình!
  • Nếu bạn không dùng vi, bạn không biết cách lập trình đúng nghĩa.
  • Những lập trình viên thực thụ sẽ chỉ dùng C.
  • Windows không phải nơi để lập trình.
  • Những thứ này không phải dành cho tất cả mọi người.
  • Cậu không phải thể trở thành lập trình viên!!!
Lập trình có ý nghĩa khác nhau với những người khác nhau, và bản thân công việc lập trình cũng đã khác rất nhiều so với thời điểm nó mới xuất hiện. Điều nực cười là rất nhiều công cụ, nền tảng được tạo ra để giúp cho những người mới học lập trình hoặc những lập trình viên lão luyện tạo ra sản phẩm nhanh hơn đều bị gán cho nhãn “không dành cho lập trình viên đích thực”.
Comment hay không comment, đó là lựa chọn của bạn - Ảnh: ST
Comment hay không comment, đó là lựa chọn của bạn – Ảnh: ST
Có thể thấy ở đây là sự sợ hãi của những lập trình viên. Khi ai cũng có thể dễ dàng tiếp cận với ngôn ngữ lập trình và tự tạo sản phẩm, cũng như tự gọi mình là người lập trình, thì sẽ không còn ai là lập trình viên nữa. Nhưng có lẽ, rào cản về kiến thức này đã bị phá bỏ từ rất lâu rồi.
Hãy sử dụng những công cụ giúp bạn dễ dàng xây dựng sản phẩm bạn mong muốn. Sẽ không phải xấu hổ nếu bạn nói trò chơi bạn làm ra được dựng trong Stencuyl hoặc GameMaker chứ không phải được viết từ đầu. Hãy lựa chọn cho mình môi trường và công cụ mà bạn cảm thấy thoải mái và có thể gắn bó với nó.

6. Hãy kiên trì với việc lập trình

Không có bất cứ tài liệu nào có thể chỉ cho bạn con đường đúng hoặc nhanh nhất để nắm vững kiến thức lập trình. Có rất nhiều cách để có thể học, và thực hành. Bạn có thể học những khái niệm đầu tiên từ sách hoặc những bài học trực quan trên mạng, hoặc có thể bắt đầu ngay bằng việc sửa lỗi sai của người khác. Và tất nhiên, có rất nhiều ngôn ngữ cho bạn lựa chọn để bắt đầu.
Một vấn đề khá phổ biến khi các bạn tự học lập trình, đó là các bạn sẽ dễ dàng vượt qua những phần đơn giản, nhưng sẽ gặp khó khăn tại những phần rất quan trọng sau đó. Bạn có thể biết cách in một vài dòng lên màn hình, nhưng không thể làm việc được với những dự án thật. Bạn sẽ bắt đầu cảm thấy mất phương hướng và đổ lỗi cho giáo trình.
Ngày nay việc học đã không còn khó khăn - Ảnh: ST
Ngày nay việc học đã không còn khó khăn – Ảnh: ST
Khi bạn gặp phải tình huống này, tất cả những giáo trình trực tuyến hay tài liệu đều trở nên vô dụng, vì những viết ra nó đều mặc định rằng, bạn đã có kinh nghiệm trong lập trình. Việc khó khăn tiếp theo là bạn sẽ phải tìm ra thứ mình cần phải học tiếp, trong khi bạn không thể biết cái mà bạn không biết. Hệ thống khóa học lập trình miễn phí http://myclass.vn cũng xuất phát từ nhu cầu này, với mong muốn hỗ trợ tối đa việc học lập trình của các bạn, chúng tôi đã tạo ra kênh học lập trình miễn phí này.
Bạn sẽ vấp phải trở ngại này khi học lập trình ở bất kỳ đâu, còn cách giải quyết nó, là hãy tiếp tục kiên trì với việc lập trình. Hãy tiếp tục tìm kiếm những điều mới mẻ xung quanh những thứ đã học, thu nạp thêm thông tin, và tự tay xây dựng những ứng dụng của riêng mình. Bạn sẽ dễ dàng tìm được thành công nếu như bạn biết rõ mục tiêu học lập trình của mình là gì.
Thành công sẽ đến với bạn nếu bạn kiên trì xây từng viên gạch lên bức tường của mình. Nếu bạn kiên trì và dành thời gian để tìm hiểu nó, việc lập trình sẽ dễ dàng bị bạn chinh phục.

7. Điểm cốt lõi của việc học lập trình

Học lập trình không khó . Khó ở chỗ là chúng ta có phương pháp học và có chịu cố gắng học hay không thôi. Khi bắt đầu học một ngôn ngữ lập trình cũng giống như bạn đang bắt đầu vào học một môn ngoại ngữ để giao tiếp với người nước ngoài. Ngôn ngữ lập trình là cách để người lập trình giao tiếp với máy tính , và nhờ nó làm 1 công việc nào đó trong phạm vi khả năng cho phép của nó. Bạn muốn điều khiển được chiếc máy tính của mình không còn cách nào khác là bạn phải nắm được tư duy lập trình (chính yếu) và ngôn ngữ lập trình (thứ yếu).
Và hãy luôn nhớ điều này bất kỳ một bài toán, một yêu cầu, một công việc dù lớn hay nhỏ thì khi đưa vào lập trình sẽ trải qua 3 giai đoạn : (Nhập – Xử Lý – Xuất)
ImageHãy nhớ kỹ điều này, nó sẽ giúp cho bạn định hình được tư duy lập trình của mình sau này. Và tôi sẽ tiếp tục chia sẽ kiến thức về tư duy lập trình với các bạn trong những phần tiếp theo .Mong các bạn xem tiếp hồi sau . Nói về lập trình thì nó mênh mông, bao la. Có thể nói là chuyện dài nhiều tập . Nhưng một khi các bạn đã nắm được cốt truyện rồi (tư duy lập trình) thì chắc chắn bạn sẽ đam mê và thích thú nó . Tôi tin là như vậy !

8. Chọn hướng lập trình nào ?

Có rất nhiều hướng đi, sau đây là một trong các hướng:
  • Lập trình web : Frontend (là làm HTML, CSS, Javascript), Backend(PHP, Java, Ruby, Python, ASP.Net,Perl, …)
  • Lập trình mobile : iOS, Android, Windowphone, …
  • Lập trình mạng
  • Lập trình nhúng
  • Và một số hướng khác mình không thể nói hết được
Và khi đã chọn được hướng đi, việc bắt đầu từ đầu cũng rất là khó khăn, đòi hỏi bạn phải kiên trì và có lòng đam mê, nếu không 1 tuần hay chừng 1 tháng là bạn sẽ nản và từ bỏ ngay.
Còn nếu bạn kiên trì, vượt qua nhưng không đam mê, không tò mò lạ lẫm, không tự hỏi mình những câu hỏi về những đoạn mã đó tại sao không nên viết thế này, viết thế kia, chạy sao … rất nhiều câu hỏi. Bạn tự đặt và hỏi thì bạn thích hợp với CNTT vì bạn có đam mê, ngược lại bạn đừng đi theo nó, vì không có đam mê, bạn sẽ không thể bắt kịp mọi người khi mà tốc độ phát triển CNTT rất nhanh, nhanh hơn những ngành khác rất nhiều, điều này bạn nên cân nhắc.
Về việc chọn ngành học, là do các bạn tự cân nhắc
Nếu bạn đi theo lập trình web, đòi hỏi bạn rất nhiều ngôn ngữ cần hiểu biết. Bởi vì làm được 1 trang web cần kết hợp nhiều ngôn ngữ : HTML, CSS, Javascript, và 1 ngôn ngữ server (PHP, Python, Ruby, Java, C#/VB, ….) cùng với 1 database (MySQL, SQL Server, NoSQL, …)
Về lập trình mobile(di động) thì bạn chỉ cần nắm 1 ngôn ngữ là đủ như : Objective-C dùng cho lập trình iOS, C# dùng cho lập trình Windowphone, Java cho lập trình Android. C# và Java ở đây nó là Java nhưng có biến thể 1 chút, các bạn học là sẽ nắm được sự khác biệt này.
Lập trình mạng và lập trình nhúng thì mình không dám chia sẻ gì, nhưng những ngành này thì tỉ lệ việc làm kiếm được ít hơn 2 hướng trên là lập trình web và mobile, tuy nhiên ít hơn không có nghĩa là khó xin việc, vẫn có nhiều việc được đăng tuyển đều đều và lương khá cao.

Vậy chúng ta nên chọn hướng lập trình như thế nào?

Hướng nào cũng có thể mang lại cho bạn cuộc sống ổn định cả, tuy nhiên thời gian đầu bạn cũng có thể thử, thử hướng này trong một thời gian đủ dài, 3, 4 tháng chẳng hạn, nếu bạn thấy không ổn, bạn có thể đổi sang một hướng khác, cuộc sống rất dài, bỏ ra vài tháng hoặc thậm chí 1 năm để tìm được hướng đi phù hợp cho mình thì cũng không đáng là bao nhiêu, tuy nhiên qua việc thử chọn hướng, các bạn cũng sẽ ngày càng có thêm nhiều kinh nghiệm cho chính bản thân mình.

9. Nên chọn ngôn ngữ nào để học hoặc học trước các môn lập trình nào?

Qua kinh nghiệm của tôi, thật sự ngôn ngữ không quan trọng lắm, có nhiều bạn nói  tôi rằng nên học Pascal trước khi học C, C++ sẽ dễ hơn, tuy nhiên, với tôi, do là dân tỉnh lẻ, không có điều kiện học Tin học từ nhỏ, nên tôi không được học Pascal từ trường phổ thông.
Sau khi thi đậu vào trường KHTN, chúng tôi được học C và C++ sau đó, tôi thấy vẫn tiếp thu tốt, nhiều bạn bè tôi từng đạt giải quốc gia tin học, tôi thấy chúng tôi không có nhiều khác biệt khi học các môn học về lập trình.
Do vậy, tôi thấy học ngôn ngữ không quan trọng mấy, thứ mà tôi thấy quan trọng, chính là học cách xử lý vấn đề, suy nghĩ các thuật toán để giải quyết vấn đề, cách tổ chức chương trình, các phần này có thể tìm thấy trong các môn học về Lập trình căn bản, Lý thuyết đồ thị, Cấu trúc dữ liệu và giải thuật, CSDL và một môn học tôi thấy cực kì quan trọng đó chính là Lập trình Hướng Đối Tượng. Tư duy lập trình Hướng Đối Tượng là cực kì quan trọng, cho đến hiện này, tất cả các ngôn ngữ, các phần mềm, các ứng dụng đều phải sử dụng tư tưởng lập trình HĐT này. Do vậy, tôi nghĩ các bạn muốn làm tốt công việc lập trình, các bạn cần phải học tập vào trao dồi nhiều thứ liên quan đến lập trình Hướng đối tượng.
Về ngôn ngữ lập trình, tôi đã từng lập trình từ C, C++ đến C#, đến Java, PHP, tôi thấy chúng ta chỉ cần học các từ khóa, các khai báo kiểu dữ liệu, viết một chương trình HelloWorld được là chúng ta có thể học ngôn ngữ đó, ngoại trừ một số khai báo đặt biệt, còn đa số là giống nhau về tư tưởng mà thôi.
Do vậy, theo kinh nghiệm của tôi, tôi thấy rằng tư duy lập trình, lập trình Hướng đối tượng là quan trọng, còn ngôn ngữ, các bạn cứ chọn và thấy phù hợp là mình học, và tập làm các dự án một cách thuần thục về ngôn ngữ đó, khi chuyển qua ngôn ngữ khác thì mọi thứ sẽ dễ dàng.
Chúc các bạn thành công theo đam mê của mình.
Read More

Hướng dẫn làm ẩn index.php trên yii2 php framework

Làm ẩn index.php trên trang web tưởng chừng đơn giản.nhưng có nhiều người chưa biết.
sau đây mình Hướng dẫn làm ẩn index.php trên yii2 php framework.
các bạn phải kích hoạt chế độ mod_rewrite trên hosting hoặc pc của mình.
và sau đó tìm đến thư mục website của bạn và sửa file .htaccess

sau đó copy paste:
RewriteEngine on

# if a directory or a file exists, use it directly
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

# otherwise forward it to index.php
RewriteRule . index.php

Read More

Thứ Hai, 1 tháng 6, 2015

Hướng dẫn lập trình Mô hình MVC trong Yii php

Yii sử dụng mô hình MVC (Model-View-Controller: Vốn được sử dụng trong việc xây dựng các ứng dụng Client-Server nói chung) trong việc thiết kế kiến trúc cơ bản. MVC hướng tới việc phân chia các logic đặc thù trong việc giao tiếp với người dùng. Đại khái nó giúp bạn xử lý các phần khác nhau trong từng logic mà không làm ảnh hưởng tới phần khác. Mình khuyên các bạn nên tìm hiểu kỹ về MVC trước khi bắt tay vào lập trình trên Yii (mặc dù việc bắt tay vào làm luôn cũng không đến nỗi khó khăn cho lắm).

Trong mô hình MVC, model đại diện cho thông tin và các luật đối với thông tin đó! Ở đây bạn nào học ràng buộc trong môn thiết kế CSDL sẽ hiểu rõ hơn. View chứa các đối tượng tương tác trực tiếp với người dùng như là các nút, các textbox,... Controller sẽ giúp 2 thằng trước tương tác với nhau, nó đảm nhận việc xử lý dữ liệu, thu thập dữ liệu từ View hoặc đưa dữ liệu từ Model ra View...

Bên cạnh việc tận dụng mô hình MVC, Yii cũng giới thiệu đối tượng front-controller, gọi là Application. Application thu thập dữ liệu từ request của người dùng và đưa tới controller phù hợp để xử lý.
 
[​IMG] 
Cấu trúc của một ứng dụng Yii​

1. Workflow căn bản
Đồ thị bên dưới sẽ chỉ cho các bạn thấy một luồng xử lý căn bản của Yii khi nhận yêu cầu từ phía người dùng (Yêu cầu ở đây có thể là từ URL, từ Form,...)
 
[​IMG] ​

Diễn giải từng bước như sau:
1. Người dùng sẽ gửi yêu cầu dưới dạng 1 URL dạng như http://yii2vn.blogspot.com/index.php?r=post/show&id=1 và trong đó yii2vn.blogspot.com là tên miền của bạn có thể sử dụng localhost và WebServer sẽ tiếp nhận yêu cầu đó bằng cách thực thi "bootstrap script" index.php!
2. Bootstrap script sẽ khởi tạo một instant Application và chạy nó.
3. Application có được thông tin yêu cầu của người dùng từ một một đối tượng bên trong application tên là request!
4. Application xác định controller và action mà yêu cầu gọi tới nhờ một thằng khác gọi là urlManager. Ví dụ ở đây controller nó gọi tới là post, action là id

(Hu hu hu, dịch tới đoạn này thì thật sự là mình không muốn dịch tiếp tí nào, đọc tiếng Anh còn dễ hiểu hơn ấy. Một phần mình không phải chuyên gia dịch tiếng Anh CNTT, 1 phần hồi trước học ngu mấy môn lập trình kinh khủng nên không nhớ các thầy gọi mấy từ chuyên môn trên là gì, thế nên bạn nào muốn tìm hiểu kỹ mấy phần Khái niệm cơ bản của Yii thì vào trang chủ của nó đọc sẽ rõ ràng hơn nhá. Tuy nhiên mình không phải google translate đâu nhá, công sức bỏ ra cả đấy)

5. Application tạo một instant controller tương ứng để tiếp tục xử lý yêu cầu của người dùng. Controller nhận biết được yêu cầu show tham chiếu tới phương thức tên là actionShow() trong controller class. Rồi nó thực thi bộ lọc của chính nó (PostController) liên quan tới yêu cầu trên (Cái này bạn bắt tay vào làm rồi từ từ sẽ hiểu). Nếu thỏa mãn hết các yêu cầu của bộ lọc thì action show sẽ được thực thi.
6. action load một model nào đó (ví dụ Post) với id =1 từ cơ sở dữ liệu
7. action sẽ render ra 1 view tên nào đó (ví dụ show)
8. view sẽ đọc và show ra các thuộc tính (attributes) của Post model
9. view lúc này có thể thực thi thêm 1 số widget (nếu được khai báo trong nó)
10. view hiển thị ra kết quả được nhúng giữa một layout!
11. action hoàn thành việc render ra view và hiển thị trên trình duyệt của người dùng!
Read More

Hướng dẫn cấu hình Enable clean URL in yii2 php Loại bỏ url thuần đi

 Hướng dẫn cấu hình  Enable clean URL in yii2 php Loại bỏ url thuần đi
Giúp cho các bạn có thể thay đổi đường dẫn theo controller và action.
RewriteEngine on
# If a directory or a file exists, use it directly
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
# Otherwise forward it to index.php
RewriteRule . index.php
Then inside config folder,in web.php add to components
 'urlManager' => [
        'class' => 'yii\web\UrlManager',
        // Disable index.php
        'showScriptName' => false,
        // Disable r= routes
        'enablePrettyUrl' => true,
        'rules' => array(
                '<controller:\w+>/<id:\d+>' => '<controller>/view',
                '<controller:\w+>/<action:\w+>/<id:\d+>' => '<controller>/<action>',
                '<controller:\w+>/<action:\w+>' => '<controller>/<action>',
        ),
        ],

Read More