如何向程序编程人员讲授面向对象的编程?

ahs*_*ele 32 oop

我被要求开始向一组程序程序员教授C#和OO概念.我已经搜索了从哪里开始的想法,但我正在寻找关于主题的一般共识以及最初要避免的主题.

编辑

我打算每周分30分钟提交信息,直到不再有意义见面.这些演讲针对的是从新手到专家等各种技能水平的同事.

exc*_*lsr 24

你能做的最好的事情是:大量的问答.

维基百科的程序编程(PP)文章确实应该从你应该开始的地方开始:

过程编程使用过程来操作数据结构,而面向对象的编程将两者捆绑在一起,因此"对象"在其"自己的"数据结构上运行.

一旦理解了这一点,我想很多都会落实到位.

一般来说

OOP是需要时间"获取"的事情之一,每个人都有自己的路径去实现目标.在C#中编写时,并不像代码尖叫," 我正在使用OO原则! ".它更像是一个微妙的东西,比如foreach循环或string连接.

设计中心

制作之前总是使用(重复).

首先,使用一个对象,并演示与PP的基本差异.喜欢:

static void Main(string[] args)
{
    List<int> myList = new List<int>();

    myList.Add(1);
    myList.Add(7);
    myList.Add(5);

    myList.Sort();

    for (int i = 0; i < myList.Count; i++)
    {
        Console.WriteLine(myList[i]);
    }
}
Run Code Online (Sandbox Code Playgroud)

首先使用对象(以及其他OO的东西) - 在被迫创建自己的东西之前 - 引导人们沿着这条路走下去,"好吧,我正在制作类似于我刚刚使用的东西",而不是"我是否打字?" "

继承(这是一个陷阱!)

我不会花很多时间继承遗产.我认为,对于这方面的重大教训来说,这是一个常见的陷阱(通常会像其他人指出的那样制造陈词滥调的动物等级).我认为了解继承,了解如何使用 .NET Framework 至关重要,但它的细微差别并不是什么大不了的事.

当我使用.NET,我更容易"碰上继承"当我使用 .NET框架(即"这种控制有一个Content属性?"或"我就调用它的ToString()方法."而不是在我创建自己的课程时.非常(非常(非常))很少我觉得需要制作一些模仿动物王国分类结构的东西.

接口

编码到接口是关键的中级概念.它在任何地方都使用,OOP使它更容易.这方面的例子是无限的.建立我上面的例子,可以演示IComparer<int>界面:

public int Compare(int x, int y)
{
    return y.CompareTo(x); 
}
Run Code Online (Sandbox Code Playgroud)

然后,使用它来更改列表的排序顺序myList.Sort(this).(this当然,在谈论之后.)

最佳做法

由于该小组中有一些经验丰富的开发人员,因此中级课程中的一个策略是展示各种最佳实践在C#中的工作方式.比如,信息隐藏,观察者模式等.

有大量的问答

同样,每个人的学习方式略有不同.我认为你能做的最好的事情就是进行大量的问答,并鼓励小组中的其他人进行讨论.人们通常在参与时会学到更多知识,而且你应该更容易学习.

  • 嵌套的"非常"给了我一个很好的笑声.:) (5认同)

jke*_*eys 12

如果你强调人们不强调的更基本的概念,那么从程序性到面向对象的飞跃(即使在一种语言中 - 我编写程序性C++四个月,课程一段时间后感到不舒服)也可以得到缓解.

例如,当我第一次学习OOP时,没有一本书强调每个对象都有自己的数据成员集.我试图编写用于输入验证等的类,而不是理解类是对数据成员进行操作而不是输入.

立即开始使用数据结构.他们使OOP范例看起来很有用.人们教你如何制作一个"House"课程,但由于大多数初学程序员都希望立即做一些有用的事情,这似乎是一种无用的绕道.

立即避免多态性.继承是正常的,但在适当的时候进行教学(而不是仅仅添加到基类).

当您第一次学习时,操作员重载并不重要,而特殊的ctors(默认,dtor,copy ctor和赋值操作符都有其棘手的方面,您可能希望避免这种情况,直到它们基于基本类设计为止).

让他们建立一个堆栈或链接列表.不要做遍历棘手的任何事情,比如二叉树.


Jim*_*dra 8

分阶段做.

高级概念:描述对象是什么,并将其与现实生活联系起来.

中等概念:现在他们得到了什么对象,尝试比较和对比.向它们展示为什么全局变量与类中的封装值相比较差.他们可能从封装中获得什么好处.开始介绍OOP的Tennet(封装,继承)

低级概念:进一步深入到多态和抽象.向他们展示如何通过多态和抽象获得更好的设计.

高级概念:SOLID,接口编程,OO设计模式.


HLG*_*GEM 5

也许你应该考虑一个与工作相关的问题,然后从它的程序实现开始,然后逐步完成(逐个会话)如何实现它的OOP实现.我发现专业人士经常更好地掌握概念,如果它与他们自己工作场所的真实例子直接相关.大多数教科书使用的垃圾例子通常都很难理解,因为它们让学生不知所措,为什么我会想要这样做.给他们一个真实的生活理由,为什么他们想要这样做,这更有意义.