5.2.6 Ưu điểm và nhược điểm của stack theo phương pháp hướng thủ tục

Stack theo phương pháp hướng thủ tục của chúng ta đã sẵn sàng. Tất nhiên, nó có một số điểm yếu và việc thực hiện có thể được cải thiện bằng nhiều cách, nhưng ý tưởng nhìn chung là tốt và chúng ta có thể sử dụng stack đó nếu cần thiết.

Nhưng… Nếu chúng ta thường xuyên sử dụng nó thì sẽ phát hiện ra nhiều nhược điểm. Chúng ta hãy điểm qua một số trong đó

  • Hai biến số thiết yếu (stackSP) hoàn toàn yếu đuối và dễ bị tổn thương; bất cứ ai có thể sửa đổi chúng một cách không kiểm soát, và có thể phá hủy ngăn xếp (đôi khi chỉ vô tình do thiếu cẩn thận); hãy tưởng tượng rằng nếu bạn đã vô tình viết một cái gì đó như thế này: SP = 100; Các hoạt động của stack sẽ bị xáo trộn hoàn toàn.
  • Có thể đến một ngày đẹp trời nào đó bạn cần nhiều hơn một ngăn xếp; bạn sẽ phải tạo ra thêm các mảng khác cho bộ nhớ của ngăn xếp, thêm các con trỏ stack cho các mảng mới, và còn phải thêm rất nhiều hàm pushpop nữa;
  • Và cũng có thể bạn không chỉ cần các hàm push, pop mà còn cần thêm một số các hàm khác; bạn có thể thực hiện chúng nhưng hãy thử tưởng tượng những gì sẽ xảy ra khi bạn có hàng chục ngăn xếp khác nhau ?
  • Chúng ta đã sử dụng stack int, nhưng bạn có thể muốn sử dụng các ngăn xếp cho các kiểu khác: float, string hoặc thậm chí các arraystruct; những gì sẽ xảy ra sau đó ?

Cách tiếp hướng đối tượng cung cấp giải pháp để giải quyết các vấn đề này. Vậy nó có gì ? Câu trả lời là:

  • Khả năng ẩn (bảo vệ) các giá trị chống lại truy cập trái phép (được gọi tính đóng gói – encapsulation)
  • Khi bạn có một class thực hiện tất cả các hoạt động cần thiết của stack, bạn có thể tạo ra bao nhiêu ngăn xếp bạn muốn; bạn không cần phải copy hay lặp lại code
  • Khả năng làm phong phú stack với các hàm mới (được gọi là tính kế thừa – inheritance); bạn có thể tạo một class mới (hoặc chính xác hơn một lớp con) kế thừa tất cả các đặc tính hiện có từ lớp cha cho nó thêm một số đặc tính mới
  • Bạn có thể tạo ra một khuôn mẫu (template) là một class tổng quát hóa, mã code của nó có thể thích ứng với các yêu cầu khác nhau, ví dụ, tạo các ngăn xếp sẵn sàng để làm việc với các loại dữ liệu khác.

Chúng ta hãy viết một cách thực hiện stack mới hoàn toàn từ đầu. Chúng ta sẽ sử dụng cách tiếp cận hướng đối tượng, việc này sẽ đưa bạn từng bước đi vào vào thế giới lập trình hướng đối tượng – Object Orientation Programming (OOP).