Cái này được gọi là lập trình hướng đối tượng (OOP object oriented programming).
OOP có ưu thế so với lập trình hướng thủ tục là dễ tái sử dụng hơn (ví dụ của bạn phía trên, có thể sử dụng hàm ht.nhap ở app #, class # tránh việc viết trùng nhiều lần), map với các thực thể trong cuộc sống nên cũng dễ hiểu hơn (ví dụ class HinhTron sẽ map với 1 thực thể là hinh_tron, có bán kính là r và tâm là O(x,y) ^^). Trong class này bạn tính ht.chuvi, ht.dientich, rồi ht.hinhquat, … (nguyên tắc thiết kế này được gọi là Domain Driven Design).
Có rất nhiều nguyên tắc thiết kế class trong OOP, ví dụ như Single Responsibility (1 class chỉ làm 1 việc). bạn sẽ có 3 class: class 1 là HinhTron, class2 là TinhChuViTask, class3 là TinhDienTichTask. Mỗi cách thiết kế đều có ưu nhược điểm riêng, ví dụ như SingleResponsiblity, rõ ràng nhược là quá nhiều file gây ra phân mảnh function, nhưng ưu điểm là chúng độc lập với nhau, viết unit-test dễ dàng, mở rộng cũng dễ dàng.