[Học lập trình] Lập trình hướng đối tượng dành cho người mới bắt đầu

ngày 27-12-2016

Bài viết này sẽ giúp bạn có những kiến thức tổng quan về các phương pháp lập trình và đặc biệt là những khái niệm liên quan đến lập trình hướng đối tượng, một phương pháp lập trình nền tảng cho các ngôn ngữ lập trình phổ biến hiện nay như Java, Python, C++.... 

 

Các phương pháp lập trình

 

Lập trình tuyến tính 

 
Đây là phương pháp lập trình thời gian đầu. Trong lập trình tuyến tính, chương trình gồm các câu lệnh được viết tuần tự và sẽ được thực hiện từ đầu đến cuối. Lệnh nào viết trước sẽ được thực thi trước, lệnh nào viết sau sẽ thực thi sau cho đến khi kết thúc chương trình, tương tự như cách máy tính xử lý tuần tự từng yêu cầu một.  
Lập trình tuyến tính
 
Tuy nhiên, không phải bài toán nào trong thực tế cũng đơn giản là tập hợp các yêu cầu, chỉ cần giải quyết lần lượt các yêu cầu là giải quyết được bài toán mà sẽ có những điều kiện ràng buộc cho bài toán đó, có những yêu cầu mà nếu thỏa thì mới thực hiện. Lúc đó người ta đưa vào những lệnh goto và nhãn để chương trình có thể thực hiện được.
 
Lập trình tuyến tính
 
Bạn sẽ thấy không đơn giản để hiểu được khi chương trình có thêm các yêu cầu điều kiện và nhiều xử lý phức tạp hơn. Chắc ai đã từng lập trình trên ngôn ngữ Assembly sẽ không thể nào quên được những đoạn chương trình mà in ra giấy, dò từng nhãn, từng câu lệnh goto vẫn không biết được là sai ở đâu. 
 
Phương pháp lập trình này kém hiệu quả và người lập trình không thể kiểm soát được khi các phần mềm có nhiều xử lý và phức tạp hơn. 
 

Lập trình cấu trúc

 
Lập trình cấu trúc cho phép chương trình được viết và thực thi theo cấu trúc logic dễ hiểu, dễ sửa đổi  và hiệu quả hơn.
 
Lập trình được cấu trúc lần đầu tiên được đề xuất bởi Corrado Bohm và Guiseppe Jacopini. Hai nhà toán học này đã chứng minh rằng bất kỳ chương trình máy tính nào cũng có thể được viết chỉ với ba cấu trúc: tuần tự, điều kiện và vòng lặp.
 
Lập trình cấu trúc
 
Phương pháp lập trình cấu trúc thường đi đôi với phương pháp phân tích, thiết kế top-down. Trong đó, chương trình được tổ chức thành các hàm. Mỗi hàm đảm nhận xử lý một việc nhỏ trong toàn bộ hệ thống, và mỗi hàm này có thể chia thành các hàm nhỏ hơn. Quá trình phân chia như vậy tiếp tục diễn ra cho đến khi nhận được hàm nhỏ, đơn giản hơn. Các hàm khá độc lập với nhau, do đó có thể phân công cho nhiều nhóm, cá nhân đảm nhận viết các hàm khác nhau.Người ta gọi đó là quá trình làm mịn dần.
 
Cấu trúc chương trình theo lập trình cấu trúc
 
Cấu trúc chương trình theo lập trình cấu trúc
 
 
Dữ liệu được chuyển đổi qua lại thông qua các tham số gọi hàm. Trong đó, những dữ liệu có tính chất dùng chung cho toàn hệ thống sẽ được khai báo toàn cục (global) để nhiều hàm có thể truy cập, đọc và thay đổi giá trị chung khi cần. Mỗi hàm cũng có các biến dữ liệu riêng gọi là dữ liệu cục bộ (local).
 
Mối quan hệ giữa biến dữ liệu và hàm trong lập trình cấu trúc
 
Mối quan hệ giữa biến dữ liệu và hàm trong lập trình cấu trúc
 
Lập trình hướng cấu trúc rất thông dụng trong những năm 80 và đầu những năm 90, nhưng do chú trọng đến xử lý chức năng, thuật toán mà ít quan tâm đến dữ liệu nên lập trong nhiều trường hợp cần hiểu và xử lý dữ liệu một cách linh động, lập trình cấu trúc bộc lộ những hạn chế và những nhược điểm. Do đó, dần dần lập trình hướng cấu trúc đã bị thay thế bằng phương pháp lập trình hướng đối tượng.
 

Lập trình hướng đối tượng

 
Lập trình hướng đối tượng là kiểu lập trình nhằm vào sự tương tác giữa các đối tượng. Mỗi đối tượng có những thuộc tính xác định các đặc điểm, những phương thức xác định những chức năng của đối tượng. Chúng tạo thành cấu trúc của đối tượng.
  • Tập trung vào dữ liệu thay cho các phương thức
  • Chương trình được chia thành các đối tượng độc lập.
  • Cấu trúc dữ liệu được thiết kế sao cho đặc tả được các đối tượng.
  • Dữ liệu được che giấu, bao bọc.
  • Các đối tượng trao đổi với nhau thông qua các phương thức
 

Một số khái niệm trong lập trình hướng đối tượng

 

Đối tượng

 
Trong thế giới thực, đối tượng là những thực thể tồn tại có trạng thái và hành vi.
  • Ví dụ 1: con người (sinh viên Nguyễn Văn An, nhân viên Trần Thị Thảo), đồ vật (phòng học C41, máy in Laser Jet 4300), chứng từ (hóa đơn HD01, đơn đặt hàng DDH_14022008_01).
  • Ví dụ 2: Đối tượng là một chiếc xe hơi cụ thể với các thông tin về chiếc xe:

Biển số xe
Hiệu xe
Màu sơn
Hãng sản xuất
Năm sản xuất

Tiếp cận hướng đối tượng: Là kỹ thuật cho phép biểu diễn tự nhiên các đối tượng trong thực tế với các đối tượng bên trong chương trình
 

Lớp đối tượng

 
Một lớp được hiểu là một kiểu dữ liệu đặc biệt bao gồm các thuộc tính và các phương thức được định nghĩa từ trước. Đây là sự trừu tượng hóa của đối tượng. Một đối tượng sẽ được xác lập khi nó được thực thể hóa từ một lớp. Khác với kiểu dữ liệu thông thường, một lớp là một đơn vị (trừu tượng) bao gồm sự kết hợp giữa các phương thức và các thuộc tính. 
 
>>> Phân biệt giữa đối tượng (object) và lớp đối tượng (class):
Đối tượng (object): có trạng thái và hành vi.
Lớp đối tượng (class): có thể được định nghĩa như là một template mô tả trạng thái và hành vi mà loại đối tượng của lớp hỗ trợ.
Một đối tượng là một thực thể (instance) của một lớp.
 
 

Trừu tượng

 
Tính trừu tượng Abstraction: Từ những đối tượng giống nhau có thể trừu tượng hóa thành một lớp.
Loại bỏ tính chất phức tạp của đối tượng bằng cách chỉ đưa ra các thuộc tính và phương thức cần thiết của đối tượng trong lập trình.
 
Tính trừu tượng trong lập trình hướng đối tượng
 

Đóng gói dữ liệu

 
Tính đóng gói (Encapsulation): Mỗi lớp được xây dựng để thực hiện một nhóm chức năng đặc trưng của riêng lớp đó
Tính đóng gói cho phép dấu thông tin của đối tượng bằng cách kết hợp thông tin và các phương thức liên quan đến thông tin trong đối tượng.
 
Đóng gói dữ liệu
 

Kế thừa

 
Tính kế thừa (Inheritance): Cho phép xây dựng một lớp mới dựa trên các định nghĩa của một lớp đã có.
  • Lớp đã có gọi là lớp Cha, lớp mới phát sinh gọi là lớp Con
  • Lớp Con kế thừa tất cả các thành phần của lớp Cha, có thể mở rộng các thành phần kế thừa và bổ sung thêm các thành phần mới.
 
kề thừa
 

Đa hình

 
Tính đa hình (Polymorphism): cùng hành vi thức có thể được sử dụng cho những mục đích khác nhau.
Ví dụ: cùng một hành vi là lái xe (drive()) nhưng mỗi xe hơi sẽ có những cách lái khác nhau.
 

Các ưu điểm của lập trình hướng đối tượng

 
Những ưu điểm chính của lập trình hướng đối tượng:
- Thông qua nguyên lý kế thừa, trong quá trình mô tả các lớp có thể loại bỏ những chương trình bị lặp, dư và có thể mở rộng khả năng sử dụng các lớp mà không cần thực hiện lại.
- Đối tượng sẽ trao đổi với nhau về thiết kế và lập trình được dựng sẵn và phải được thực hiện theo quy trình nhất định chứ không phải dựa vào kinh nghiệm và kỹ thuật như trước. Điều này đảm bảo rút ngắn thời gian xây dựng hệ thống và tăng năng suất thực hiện.
- Nguyên lý đóng gói và che dấu thông tin giúp người lập trình bảo vệ lập trình an toàn hơn và không bị thay đổi bởi những lập trình khác.
- Tiếp cận các đối tượng trọng tâm để thiết kế, xây dựng mô hình chi tiết có liên quan chặt chẽ đến các dạng cài đặt. 
- Những hệ thống hướng đối tượng ngày càng được mở rộng và được nâng cấp thành những hệ thống lớn hơn.
- Truyền thông và trao đổi thông tin với các đối tượng giúp cho việc mô tả giao diện trở nên đơn giản hơn với các hệ thống bên ngoài. 
 

Các ngôn ngữ lập trình hướng đối tượng phổ biến 

 

Java

Lập trình hướng đối tượng với Java
 
Java là ngôn ngữ lập trình hướng đối tượng được phát triển vào cuối những năm 1990 bởi James Gosling. Khác với phần lớn ngôn ngữ lập trình thông thường, Java được thiết kế để biên dịch mã nguồn thành bytecode, bytecode sau đó sẽ được môi trường thực thi (runtime environment) chạy. Trước đây, Java chạy chậm hơn những ngôn ngữ dịch thẳng ra mã máy như C và C++, nhưng sau này nhờ công nghệ "biên dịch tại chỗ" - Just in time compilation, khoảng cách này đã được thu hẹp, và trong một số trường hợp đặc biệt Java có thể chạy nhanh hơn. Tuy cú pháp có nhiều điểm vay mượn từ C và C + + nhưng Java có cú pháp hướng đối tượng đơn giản hơn và ít tính năng xử lý cấp thấp hơn. 
Hiện nay Java được ứng dụng rất rộng rãi, từ các trò chơi, lập trình di động Android, ứng dụng web, ứng dụng nhúng, các ứng dụng ERP, các ứng dụng core banking trong lĩnh vực ngân hàng, tài chính, big data,… Java còn là nền tảng chính để hình thành và phát triển hệ điều hành Android, thư viện ứng dụng Google Play, Amazon Appstore. Java còn được xếp hạng đầu tiên trong danh sách các ngôn ngữ lập trình phổ biến của TIOBE năm 2016.
 

Python

Lập trình hướng đối tượng với Python
 
Một ngôn ngữ nữa rất tiềm năng cho người mới bắt đầu làm quen là Python. Python là ngôn ngữ có hình thức rất sáng sủa, cấu trúc rõ ràng, rất thuận tiện cho người mới học lập trình và được đánh giá là một ngôn ngữ khá dễ học. Python được sử dụng để lập trình Web, lập trình nhúng, lập trình ứng dụng desktop và đặc biệt hiệu quả trong lập trình tính toán khoa học nhờ các công cụ và lớp thư viện được xây dựng sẵn (Python Imaging Library, pyVTK, MayaVi 3D Visualization Toolkits, Numeric Python, ScientificPython,…),…
 

C++

Lập trình hướng đối tượng với C++
C++ là ngôn ngữ lập trình hướng đối tượng khá phổ biến và thường được giới thiệu cho SV khi bắt đầu học làm quen với phương pháp lập trình hướng đối tượng.  C++ được xếp vào nhóm ngôn ngữ lập trình bậc thấp, có khả năng xử lý rất nhanh do can thiệp cấp hệ thống. Ưu điểm này khiến C++ là lựa chọn số 1 cho các ứng dụng cần tốc độ, điển hình như các trò chơi, phần mềm nhúng, phần mềm hệ thống, các phần mềm tài chính hay các chương trình quân sự hoạt động theo thời gian thực,.. Ngoài ra, do có cộng đồng phát triển C++ khá đông nên bạn có thể dễ dàng tìm thấy rất nhiều các tài liệu, thư viện trên Internet cũng như các sự trợ giúp trên các diễn đàn về C++. 
 

.NET

Lập trình hướng đối tượng với .Net
.NET là công nghệ nền tảng của Microsoft giúp phát triển các ứng dụng tốt nhất trên nền tảng của hệ điều hành Windows cũng như Internet. Kết hợp với C#, .NET có những kỹ thuật lập trình mới và cung cấp cho các lập trình viên một nền tảng lập trình hiện đại và phát triển ứng dụng nhanh. Khi được tích hợp thế mạnh của Windows, các sản phẩm tiện ích khác của Microsoft, .NET trở thành một nền tảng lập trình mạnh, chiếm thị phần lớn trong ngành công nghiệp phần mềm, đem lại nhiều cơ hội cho các lập trình viên với nhiều loại ứng dụng như: ứng dụng desktop, ứng dụng web, ứng dụng ERP, lập trình di động, lập trình nhúng, lập trình game,…
 

PHP

Lập trình hướng đối tượng với PHP
 
PHP Hypertext Preprocessor (PHP) là một ngôn ngữ lập trình hướng đối tượng cho phép các lập trình viên web tạo các nội dung động và các xử lý tương tác ở mức back-end. Về cơ bản, PHP được sử dụng để phát triển các ứng dụng phần mềm trên web. Do được tối ưu hóa cho các ứng dụng web, tốc độ nhanh, nhỏ gọn, cú pháp giống C và Java, dễ học và thời gian xây dựng sản phẩm tương đối ngắn hơn so với các ngôn ngữ khác nên PHP đã nhanh chóng trở thành một ngôn ngữ lập trình web phổ biến trên thế giới.
 

JavaScript

Lập trình hướng đối tượng với JavaScript
 
JavaScript là một ngôn ngữ lập trình hướng đối tượng được sử dụng phổ biến để lập trình web cũng như lập trình game trên nền web hiện nay. JavaScript được tích hợp với HTML để tạo nên các giao diện và xử lý mức front-end ấn tượng, đẹp mắt. JavaScript không hề liên quan tới ngôn ngữ lập trình Java, được hầu hết các trình duyệt ngày nay hỗ trợ và với Javascript ứng dụng web của bạn sẽ trở nên vô cùng sinh động, mang tính trực quan và tương tác cao.
 
 
Bạn sẽ lựa chọn ngôn ngữ lập trình nào để bắt đầu? Click tại đây để chúng tôi gợi ý cho bạn.

 

Và bạn chọn….

 
Để trở thành một lập trình viên giỏi trước hết bạn phải vững kiến thức nền tảng về lập trình, cần rèn luyện và trau dồi thêm kỹ năng thực hành và hơn hết là bạn phải trải nghiệm thực tế. Bạn hoàn toàn có thể tự học lập trình từ nhiều nguồn thông tin khác nhau từ Internet nhưng lúc này bạn cần phải kỹ năng chọn lọc và hệ thống lại kiến thức, quan trọng nhất là bạn phải kiên nhẫn để khắc phục các lỗi trong quá trình viết code có thể gặp phải. Ngoài ra, bạn cũng có thể chọn tham gia các khóa học lập trình tại Trung Tâm Tin Học để tiết kiệm thời gian và biết được nhiều hơn, trải nghiệm nhiều hơn các tình huống thực tế. Học lập trình sẽ không khó nếu chúng ta biết cách. Chúc bạn thành công!
 
 (Trích giáo trình học Lập trình của Trung Tâm Tin Học và tổng hợp thông tin từ Internet)
 
ai
Trung Tâm Tin Học
ai
Trung Tâm Tin Học
Chào mừng bạn đến với Trung Tâm Tin Học.
Bạn đang cần hỗ trợ thông tin gì ạ? Hãy Chat ngay với chúng tôi nhé.