Thể hiện các nguyên tắc hướng đối tượng cho những người không lập trình sử dụng các đạo cụ vật lý [đã đóng]


8

Chúng tôi sắp bắt tay vào việc giúp đỡ một trại khởi động mã hóa mới trong công việc của tôi, nơi mọi người từ các phòng ban khác có thể đến học cách viết mã từ dân IT. Trong khi điều này là tuyệt vời và tất cả, tôi đang ở trong một dưa chua. Tôi đã được yêu cầu đưa ra một cách để thể hiện một cách vật lý các khái niệm về tính kế thừa, đa hình, có và là một mối quan hệ với một bản demo vật lý nào đó. Thực tế, họ đang yêu cầu tôi sử dụng đạo cụ để thể hiện những khái niệm này cho những người không biết gì về lập trình và khoa học máy tính!

Có bất kỳ sự tương tự hay trình diễn tốt nào bạn đã sử dụng hoặc thấy để thể hiện các nguyên tắc này không?


1
Tôi đoán rằng Google sẽ trả lại rất nhiều ví dụ.
qwerty_so

2
Xin chào Adam, đừng hiểu sai ý tôi, nhưng đây là một loại câu hỏi điển hình quá rộng cho trang web này hoặc cần tham khảo các tài nguyên của bên thứ ba, cũng không có chủ đề. Nó cũng thuộc danh mục "lời khuyên giáo dục ngoài chủ đề". Tôi khuyên bạn nên tự xóa trước khi bạn nhận được vô số lượt tải xuống từ cộng đồng.
Doc Brown

3
Coi chừng bạn không trộn lẫn "is-a" theo nghĩa "is-an-dụ-of" và "is-a" theo nghĩa "thừa kế-từ". Các lớp học là khái niệm về sự vật, nhưng các đối tượng xung quanh bạn trong phòng đào tạo sẽ là các trường hợp của các lớp học.
Simon B

1
Xin đừng để các bộ phận khác của bạn bắt đầu viết mã cho doanh nghiệp.
vườn

1
Nhân tiện, tôi chỉ chú ý hơn là không ai giải thích được INTERFACE là gì. Thành thật mà nói, tôi nghĩ sẽ tốt hơn nếu bỏ đi sự kế thừa, và chỉ nói về giao diện. Vì giao diện có thể được ánh xạ trực tiếp đến fonctionnality, điều này dễ dàng hơn.
Walfrat

Câu trả lời:


11

Dạy các nguyên tắc OO cho những người không lập trình cũng giống như dạy lặn biển cho những người không biết bơi.

Điều đó nói rằng , đây là một số tính tích cực với các đạo cụ được đề xuất mà bạn có thể mang đến lớp học và đi vòng quanh (hoặc ít nhất là hiển thị) để minh họa các khái niệm:


Di sản:

Đạo cụ:

  • Một loạt iPhone của các phiên bản khác nhau, kể từ iPhone đầu tiên, thông qua iPhone 6, 6+, v.v.

Giải thích: nói với họ hơn mỗi iPhone mới là một cải tiến gia tăng của người tiền nhiệm trước đó. Hầu hết các bộ phận đều giống nhau, nhưng một số đã được cải thiện. Tương tự cho các chức năng. Nói sau đó thậm chí một số bộ phận có thể là cùng một bộ phận của iPhone đầu tiên không có lý do để thay đổi.

nhập mô tả hình ảnh ở đây


Đa giáo phái:

Đạo cụ:

  • Một loạt các thiết bị gia dụng điện, như máy pha cà phê, TV, máy xay sinh tố, radio, đèn bàn. Cũng là một ổ cắm trên tường.

Giải thích: Vì tất cả các thiết bị đều tuân thủ cùng một giao diện (tất cả chúng đều có phích cắm với các lỗ cắm trên tường), tất cả các tạo tác của mèo đều lấy nguồn từ phích cắm như vậy. Từ quan điểm của ổ cắm, việc bạn cắm plugin vào nguồn chính không quan trọng, miễn là nó tuân thủ "giao diện" của ổ cắm.

nhập mô tả hình ảnh ở đây nhập mô tả hình ảnh ở đây nhập mô tả hình ảnh ở đây


Là một:

Đạo cụ: những chiếc iPhone đã nói ở trên

Giải thích: mỗi iPhone 7 là một iPhone, mọi iPhone là một điện thoại thông minh, mỗi điện thoại thông minh là một điện thoại.


Has-a: Thành phần

Đạo cụ: những chiếc iPhone đã nói ở trên, cộng với bảng điều khiển màn hình cảm ứng tách rời.

Giải thích: mọi iPhone đều có bảng điều khiển màn hình cảm ứng (thứ trong suốt có cáp phẳng gắn bên cạnh). Bảng điều khiển màn hình cảm ứng tách biệt với iPhone không được sử dụng nhiều. Bạn không thấy những người mang trong túi của họ tách rời các tấm màn hình cảm ứng với dây cáp phẳng treo.

nhập mô tả hình ảnh ở đây

Has-a: Tập hợp

Đạo cụ: Một móc khóa có chìa khóa, con trỏ laser, dụng cụ mở nắp, đèn flash, điều khiển báo động ô tô và các đồ trang sức và fobs khác.

Giải thích: Móc khóa là một vật thể tổng hợp có rất nhiều chìa khóa được gắn vào nó, các phím, con trỏ laser và các dụng cụ mở có thể tự hoạt động mà không cần gắn vào móc khóa và không để lại móc khóa hoặc công cụ (phím, v.v.) một trạng thái không ổn định. Bạn có thể thêm và xóa các mục này vào móc khóa nhưng chúng có thể tự tồn tại như các công cụ chức năng. Bản thân chiếc móc khóa có thể là epmty và bạn không thể nói nó bị hỏng vì điều đó.

nhập mô tả hình ảnh ở đây


LƯU Ý: những lớp đó sẽ không thực sự dạy cho mọi người OOP, giống như phương pháp Chineasy sẽ không dạy cho bạn quan. Nó sẽ chỉ là một cái nhìn sâu sắc (hy vọng) cho một cách suy nghĩ của người ngoài hành tinh.


3
Để kế thừa, tôi thích một sự tương tự điện thoại thông minh khác: điện thoại Android thuần so với điện thoại Android có công cụ của nhà sản xuất. Cái sau rõ ràng kế thừa từ cái đầu tiên. Loạt điện thoại thông minh của bạn giống như các bản phát hành khác nhau của một sản phẩm, ít giống như sự kế thừa.
RemcoGerlich

@RemcoGerlich OP hỏi ví dụ vật lý . Bạn đang nói về phần mềm (HĐH Android). Bên cạnh đó, một điện thoại LG và điện thoại HTC không liên quan đến nhau, việc triển khai một thứ gì đó khác nhau, thứ mà các nhà sinh học gọi là tiến hóa hội tụ. Họ chỉ sử dụng một số hương vị của cùng một hệ điều hành (một lần nữa, phần mềm). Ví dụ về iPhone là về những thứ vật lý được xây dựng tăng dần qua kế hoạch chi tiết của thế hệ trước thay vì phát minh ra tất cả từ đầu mọi lúc.
Tulains Córdova

2
Điều này thật tuyệt. Tôi phải nhớ bài đăng này vào lần tới khi tôi phải giải thích điều đó :)
Quentin

Tôi không nghĩ rằng điện thoại là hữu ích cả. Họ đại diện cho các phiên bản / thế hệ nhiều hơn bất cứ điều gì khác. Và họ quá tầm thường cho mục đích này ngay từ đầu.
Martin Maat

@ TulainsCórdova: Sự tiến hóa hội tụ diễn ra riêng rẽ , nhưng HTC và LG nhận thức rất rõ về những gì người kia đang làm và nó ảnh hưởng đến quá trình của họ. Thứ hai, bạn đúng rằng ví dụ về hệ điều hành / nhà sản xuất bản địa không phải là vật lý, nhưng nó là một ví dụ tốt hơn về sự kế thừa. Ví dụ về iPhone của bạn dường như ngụ ý rằng mỗi điện thoại được thừa hưởng từ người tiền nhiệm của nó, nhưng đó sẽ không phải là một cách hay để mô hình hóa hành vi này. Nếu không bằng cách sử dụng ví dụ về HĐH, tôi khuyên bạn nên tìm một ví dụ kế thừa tốt hơn, ví dụ như 3 người khác nhau (người quản lý, người gác cổng, giáo viên) đều là cùng một người bên dưới .
Flater

3

Bắt đầu với những điều cơ bản. Đừng sử dụng các đối tượng vật lý làm đạo cụ để đề xuất những thứ có thể là đối tượng, bởi vì đó là cách nghĩ sai lầm về các hệ thống hướng đối tượng. Thay vào đó, hãy lấy một chiếc lá ra khỏi các bài giảng Giáng sinh của Viện Hoàng gia và sử dụng khán giả của bạn làm đạo cụ. Nhận một vài người trong số họ tình nguyện và giao cho họ một số vai trò là đối tượng trong một hệ thống hướng đối tượng thực tế, thực tế. Có thể có một trong số họ là một hàng đợi và một vài nhà sản xuất và người tiêu dùng khác, hoặc một cái gì đó tương tự. Cho họ thấy rằng điều quan trọng về một đối tượng là hành vi của nó trong cách nó liên quan đến các đối tượng khác, chứ không phải mô hình của nó (bởi vì trong nhiều trường hợp, nó không thực sự mô hình hóa bất cứ điều gì hữu hình).


Ý tưởng hay và có vẻ rất giống với "trò chơi" thẻ Xtreme Lập trình CRC .
Tulains Córdova

1

Kinh nghiệm cá nhân của tôi thậm chí là một số nhà phát triển cơ sở không có nền tảng học thuật về khoa học máy tính, những người vừa học lập trình bằng cách tìm kiếm trên internet không thể hiểu chính xác các chi tiết của OOP. Ví dụ: sử dụng tên thích hợp cho các thuộc tính hoặc viết các phương thức ngắn và danh sách sẽ tiếp tục. Tôi nghĩ rằng việc dạy các khái niệm OOP cho những người chưa từng tiếp xúc với lập trình là một việc làm quá mức và sẽ nhanh chóng biến thành sự thất vọng.

Tôi sẽ đề nghị bắt đầu với một số cơ bản về lập trình bằng ngôn ngữ bạn chọn và sau đó từ từ hiểu lý do tại sao bạn được thừa hưởng từ một lớp khác hoặc tại sao bạn tạo các lớp lồng nhau và cuối cùng nói với họ "Ok, điều này là Is-A mối quan hệ và điều đó là mối quan hệ Has-A ", v.v.


1

Bạn nên tập trung vào các tính năng quan trọng nhất của OO. Đó là đóng gói, phân biệt giao diện / thực hiện và khớp nối lỏng lẻo.

Những gì bạn không nên làm là thực hiện một thỏa thuận lớn từ hệ thống phân cấp thừa kế và sử dụng các nguyên tắc phân loại như một phép ẩn dụ cho điều này. Thứ nhất, thừa kế không phải là một khái niệm quan trọng trong OO, thứ hai, các phép ẩn dụ phổ biến thực sự gây hiểu lầm nhiều hơn là khai sáng. Các lớp học thực sự không có gì giống như các loài động vật hoặc trái cây hoặc bất cứ điều gì.

Tôi nghĩ rằng một nhà bếp sẽ là một phép ẩn dụ hữu ích. Một nhà bếp đòi hỏi rất nhiều chức năng phức tạp để có thể nấu thức ăn. Nhưng nó không được chế tạo như một máy kết nối lớn. Thay vào đó, nó được xây dựng từ các thành phần như lò nướng, tủ lạnh, bồn rửa, vv Mỗi thành phần có một mục đích được xác định rõ. Chúng có thể thay thế - bạn có thể thay đổi lò nướng sang một lò khác từ một nhà cung cấp khác, và nó thậm chí sẽ phù hợp trong cùng một không gian và về cơ bản có cùng giao diện. Tất cả đều kết nối với cùng một đường ống và cửa hàng. Các thành phần được ghép lỏng lẻo: Thay đổi lò nướng sẽ không khiến tủ lạnh thay đổi hành vi của nó. Một lỗi thiết kế trong tủ lạnh sẽ không ảnh hưởng đến các thành phần khác. Người sửa lò nướng chỉ cần là chuyên gia về lò nướng.

Bây giờ hãy xem xét nếu một nhà bếp được xây dựng như một "cỗ máy" lớn với tất cả chức năng này (khả năng nướng, đông lạnh, khuấy, làm mát, v.v.), nhưng không được tách thành các thành phần. Bạn sẽ không thể thay thế hoặc thêm các thành phần từ các nhà cung cấp khác nhau. Có thể một số chức năng trong nhà bếp đặc biệt này là phụ, nhưng không có gì bạn có thể làm. Người sửa chữa sẽ phải hiểu mọi thứ vì nó là một cỗ máy lớn. Có nguy cơ cao rằng một lỗi thiết kế trong lò sẽ khiến bồn rửa bị nổ. Và như thế.


Lưu ý rằng điều này sẽ không giúp bất cứ ai học viết mã. Bạn không học cách viết mã thông qua phép ẩn dụ - bạn học cách viết mã bằng cách viết mã để giải quyết vấn đề.


+1 Để chỉ ra rằng các chất tương tự động vật là ví dụ xấu.
Tulains Córdova

1

Sử dụng Phân loại động vật và thú nhồi bông nếu bạn thích

Điều này tạo ra sự cân bằng phù hợp của khả năng tiếp cận mờ với cảm giác rằng đây là công cụ khoa học nghiêm túc của. Sử dụng một số thú nhồi bông rẻ tiền làm đạo cụ, nếu bạn thích và có thể sử dụng bản trình bày PowerPoint với hình ảnh động vật thường xuyên - mọi người thích động vật, và hầu hết mọi người sẽ thích thú với hình ảnh động vật bất cứ khi nào họ có hình ảnh động vật tốt.

Nó giúp hệ thống phân loại sinh học là một thứ thực tế của người Bỉ và hầu hết các học sinh tốt nghiệp trung học sẽ nhớ nó một chút.

CÁCH MẠNG :

  1. Một điều lưu ý là thỉnh thoảng bạn có thể gặp một người có thế giới quan bị thách thức bằng cách thảo luận về một chủ đề liên quan đến tiến hóa. Bạn có thể đảm bảo với những cá nhân đó là bạn chỉ nói về phân loại động vật .

  2. Ẩn dụ động vật hoạt động tốt nhất nếu bạn biết một chút về Sinh học và hệ thống phân loại động vật. Nếu bạn thực sự không nhớ tiểu sử Trung học của mình và quên các thuộc tính phổ biến của động vật có vú, bạn có thể tốt hơn bằng cách sử dụng một ví dụ mà bạn có thể nói một cách có thẩm quyền.

    Trong mọi trường hợp, tránh các chủ đề công nghệ cao cho ví dụ của bạn. Hầu hết giáo dân thực sự không quan tâm đến các mô hình máy tính hoặc thiết bị ngoại vi. Những họa tiết này sẽ củng cố các khái niệm mà khán giả của bạn có thể đã có, bước vào, rằng toàn bộ chủ đề này chỉ dành cho các tín đồ công nghệ.

Các khái niệm để mô tả:

Lớp học và đối tượng - Lý tưởng của chó, so với cá nhân chó.

Phương pháp và thuộc tính - Chó là lông. Chó có thể sủa.

Overrides - Không phải tất cả các con chó đều có lông.

Kế thừa - Chó động vật có vú. Chó nói chung có thể làm những gì động vật có vú có thể làm (kế thừa phương pháp) có các thuộc tính mà động vật có vú (thừa kế thuộc tính).

Các lớp trừu tượng - Không có động vật thực tế chỉ là một động vật có vú.

Kế thừa từ một lớp cụ thể - chó săn Scotland là những con chó không có phương pháp sủa .

Thành phần - Một con chó hoặc một động vật khác có thể cổ áo, nhưng cổ áo không phải là một phần của động vật.

Khái niệm nâng cao hơn một chút

Ở trên là như tôi đã từng nói với một cuộc nói chuyện đầu tiên, nhưng bạn có thể tiếp tục:

Hiệp hội - Một con chó hoặc một con mèo có thể một cổ áo. Nhưng cổ áo cũng là một đối tượng độc lập. Bạn có thể cho chó đi, nhưng giữ cổ áo.

Tập hợp - Một con cá có thể thuộc về một trường học . Nếu ngôi trường bị cá voi nuốt chửng, ngôi trường bị phá hủy, cùng với tất cả trong đó.

Chuỗi kế thừa - Chó động vật có vú Vertibrate Động vật là một dạng sống. (Và chỉ ra rằng các hệ thống máy tính cũng có thể phức tạp như vậy.)

Thu hút khán giả của bạn

Đây là tất cả các khái niệm khó khăn, và có lẽ bạn sẽ nhận được rất nhiều ánh mắt thủy tinh nếu bạn không chủ động giữ mọi người tham gia và nói chuyện.

Ví dụ: không tự liệt kê các thuộc tính và phương pháp cho chó, hãy yêu cầu nhập từ nhóm. (Mọi người khó có thể quan tâm đến động vật, vì vậy điều đó có ích.)


Lưu ý chắc chắn về thành phần, tôi sẽ tốt hơn cho một cái gì đó như một máy tính được cấu thành từ CPU, .... Bằng cách bạn quên phân biệt mạnh (thành phần) và tổng hợp yếu. Nếu tôi chết, tay tôi cũng sẽ chết, nhưng không phải máy tính của tôi. Ghi đè: thêm một cái gì đó trong dòng: không phải con chó tấn công theo cùng một cách.
Walfrat

1
Các ví dụ động vật để giải thích các khái niệm OO không phải là một trong những lựa chọn tốt nhất. Quá rò rỉ và vị thành niên. Ngoài ra, OP muốn sử dụng đạo cụ vật lý làm tài nguyên giáo khoa.
Tulains Córdova

1
@ TulainsCórdova, câu trả lời của riêng bạn gợi ý về việc bạn đã không thành công như thế nào khi dạy những người phi kỹ thuật những điều cơ bản của OO. Động vật khiến con người gắn kết hơn và không có gì "rò rỉ" hay chưa thành niên về Sinh học. Ngoài ra, câu trả lời của tôi đề cập đến đạo cụ trong tiêu đề.
Tim Grant

@TimGrant Tôi chưa bao giờ dạy hoặc giải thích OOP cho những người không lập trình, nhưng tôi đã thấy những người khác thất bại khi sử dụng các ví dụ về động vật. Ngành khoa học sinh học không bị rò rỉ hay chưa thành niên, tôi đã nói về việc giải thích OOP với các ví dụ động vật. Thật là tuyệt vời. Không có ý xúc phạm.
Tulains Córdova

@ TulainsCórdova, bạn nói rò rỉ, chưa thành niên, và bây giờ, có phải là trite? Tritility sẽ yêu cầu khán giả đã nghe nó trước đây, và khán giả này thì không. Bạn có bất kỳ hiểu biết thực tế để cung cấp, hoặc bạn chỉ đang ném bóng vào một câu trả lời cạnh tranh?
Tim Grant

-3

LEGO

Nhận một số lego và xây dựng một chiếc xe hơi (lớp cơ sở)

Sau đó, có cùng một chiếc xe với đèn (thêm chức năng)

Sau đó, cùng một chiếc xe với bánh xe lớn (ghi đè)

Sau đó lấy một chiếc xe máy (lớp cơ sở khác nhau)

Sau đó lấy một chiếc xe với lốp xe lấy ra hai bánh và một đèn. làm cho nó trông khủng khiếp (cố gắng tận dụng chức năng xe máy vào một hệ thống hiện có)

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.