![]() |
1
12
我会从没有密码,有CRC卡开始。让全班扮演卡片角色,并进行真正的OO设计课程。在这里,您可以介绍单一责任原则,讨论has-a-vs-is-a和继承、封装。我遇到太多程序员,他们对OO一无所知,仍然在C++、C语言、Java或Delphi中编程。 [编辑] 稍后,您可能希望将基于类与基于javascript(或self)和基于原型的OO进行比较,以讨论不同的分类方式。 |
![]() |
2
7
正如其他人所建议的,使用现实世界中的例子来解释事情,比如车辆类和卡车类来继承。但重要的是。一旦他们了解了现实世界中的例子,他们就需要在下一步看到与程序相关的例子,然后才能真正理解为什么它对编程很重要。 我见过很多可怕的C++代码,不仅仅是那些不理解概念的人。我见过许多编码人员,他们确切地知道对象是什么,并且能够完美地解释多态性和所有这些技术OOP术语。但是如果他们不知道何时使用它,他们就永远无法充分利用它。我知道,因为我自己就是这样。我在高中读过一本关于OOP的书,它解释了所有的概念,但是我在使用它们之前花了很多年的时间,因为我不知道它们什么时候真正有益于我的代码。尝试给出编程任务,在没有OOP的情况下进行编程会更有挑战性。学生们会自然而然地采取更容易的路线并开始理解。做是最好的学习方式。 您可能有一个链表类,并要求它们从中继承,通过编写自己的push/pop、enqueue/dequeue方法来生成堆栈或队列。或者生成一个二叉树类,并要求它们通过重写insert方法将其转换为二叉搜索树。让他们使用动态内存,这样他们就能明白为什么[复制]构造函数/析构函数很重要。让他们编写一个计时器类,它将时间存储为秒,但使用getter/setter自动转换为分钟或小时。 我不知道您的学生是否从一开始就使用了char数组或std::strings。让它们同时使用。当他们理解char数组有多困难时,他们会更欣赏string类,并理解类的意义是抽象,而不仅仅是代码组织。如果您的学生确实询问过代码组织,并且不确定特定的数据或方法应该放在哪里,请记住这句话:
|
![]() |
3
6
从避免使用getter和setter类开始。OOP的主要承诺之一是“数据和程序结合在一起”。它的目的是解决程序程序中一个长期存在的问题:在一个点上对数据结构的更改会随着数据流而在程序中产生涟漪。OOP通过确保数据
留置
. getter和setter只是一种绕过OOP(数据传入)的机制
另外,不要用C++来教OOP。使用为OOP设计的语言。具有真正封装(对私有成员的更改不需要重新编译客户端代码)并统一处理所有类型(例如字符串文本是第一类对象)的内容。 |
![]() |
4
4
我不想用C++来教OOP,因为C++不是一种优雅的语言,而OOP在C++中有点奇怪。我更喜欢Java或者斯卡拉或者Python,这是一种很好的教学语言。我的第一选择是scala,因为它有很强的概念。例如,没有静态成员破坏OOP。别忘了,如果编程很有趣(C++不是很有趣的话),教学更有效。 我会说:
|
![]() |
5
3
展示一下这些与 程序设计 ?任何人被告知“你可以用类来模拟物理对象,比如说一个人”,会得到什么呢? 这和他们想做的事有什么关系? 学习 ?也就是说,编程? 这种“教”OOP的方式完全是胡说八道,对任何不教的人都是毫无用处的。 已经 熟悉OOP的概念。 如果你想教OOP,给他们看一些有用的东西 编程中 . 类等OOP概念如何帮助解决实际的编程问题?他们提供的解决方案是否比必须使用的解决方案更清洁? 很容易接受这样一个抽象的事实:“我们可能有一个个人类”。也很容易接受“我们可以从这个人的阶级中衍生出一个更专业的人的阶级,比如看门人、孩子或女人”。缺少的是关于这在编程中如何有用的任何线索。继承在解决编程问题中是如何有用的?多态性如何有用?为什么我们关心数据隐藏? 关于这一点,您的具体示例是什么?它只是一个getter和setter的列表。实际上没有数据隐藏。没有抽象。这只是我们一直可以做的额外代码。如果你不能写 好的 班上,你有资格教书吗?
看在上帝的份上,使用
|
![]() |
6
2
随着在当今编程世界中接口越来越重要,我将集中于类的工作(行为),而不是它的字段和属性。这有助于强化“IS-A”思维的概念(A.K.A. Liskov Sustitution Principle ) |
![]() |
7
1
正如我们所知,面向对象的概念非常接近于人类,所以,当我从OO概念开始时,我总是给出实时的例子,这有很大的不同。 前任。。。 --多态性:实时多态性的例子是“我”,我自己看到只有一个人是我,但我有不同的角色,比如我在家的时候1。我是我父母的儿子。2。当我在学校的时候,我是老师。3.当我在地面上时,我就是一名球员……只看到一个人,即我,但我有不同的角色……即多态性 --抽象:我是一名教师,你(学生)对我的教学感兴趣,而不是我为收集这些数据所做的以及我昨晚所做的。也就是说,抽象避免给用户不想要的东西。 |
![]() |
8
1
当我教授面向对象编程时,我尽量不从代码开始,而是从概念、想法和原因开始。这里是 a horrible Google translation 原来的 Swedish web page 在这里,我写下了我用来给出的OO介绍。 |
![]() |
9
0
如果时间允许,学生们渴望并且能够学习。你可以教他们编写简单的图形用户界面程序,而构建图形用户界面也是OOP擅长的地方。 Qt,在C++中设计得很好,对这个任务非常有用。学生在看到现实世界的例子之前,不能欣赏继承和虚拟功能。 |
![]() |
AstralHex · 矩阵乘法代码工作不正常 5 月前 |
![]() |
Fishie · 作为类成员的智能指针是否仍然自动释放?[关闭] 5 月前 |
![]() |
Die4Toast · 递归调用成员箭头运算符-> 5 月前 |
![]() |
Anka Hanım · 关于结构和动态数组地址的问题 5 月前 |