我的亲戚正在学习编程,很难理解课程.他很难理解,例如你需要实例化它,方法不能在其他方法中访问变量,如果你在一个类的实例中更改变量,它对其他实例不会改变.
我试图使用像类定义这样的类比就像一个房子的蓝图.实例是由该蓝图制成的房屋.
你如何解释一般的课程和OO?
认真使用动物,效果很好.这就是多年前为我设计这个概念的原因.刚刚找到了这个C#代码.看起来不错
// Assembly: Common Classes // Namespace: CommonClasses public interface IAnimal { string Name { get; } string Talk(); } // Assembly: Animals // Namespace: Animals public class AnimalBase { private string _name; AnimalBase(string name) { _name = name; } public string Name { get { return _name; } } } // Assembly: Animals // Namespace: Animals public class Cat : AnimalBase, IAnimal { public Cat(String name) : base(name) { } public string Talk() { return "Meowww!"; } } // Assembly: Animals // Namespace: Animals public class Dog : AnimalBase, IAnimal { public Dog(string name) : base(name) { } public string Talk() { return "Arf! Arf!"; } } // Assembly: Program // Namespace: Program // References and Uses Assemblies: Common Classes, Animals public class TestAnimals { // prints the following: // // Missy: Meowww! // Mr. Bojangles: Meowww! // Lassie: Arf! Arf! // public static void Main(String[] args) { Listanimals = new List (); animals.Add(new Cat("Missy")); animals.Add(new Cat("Mr. Bojangles")); animals.Add(new Dog("Lassie")); foreach(IAnimal animal in animals) { Console.WriteLine(animal.Name + ": " + animal.Talk()); } } }
一旦他得到了这个钉子,你挑战他定义鸟(飞),然后企鹅(飞!)
我通过我的妻子(特许会计师)获得的最佳方式如下.
在"常规"编程中,您拥有数据(被操纵的东西)和代码(操作的东西),它们是分开的.有时你会混淆,因为某段代码试图操纵错误的东西.
在我妻子的情况下,我说发票到了(没有实物转手)并且不小心更新了银行余额,她立刻看到这是潜在的欺诈行为(她曾经做过法务会计,一切都是潜在的欺诈行为,包括大多数我的股票交易:-).
你可以很容易地说,用一把巨大的拖把洗地板的一段代码决定用你的牙刷做.
通过OO编程,操纵器和操纵器不可避免地缠绕在一起.您不要将地板清洗过程应用到地板上,而是指示地板自行清洗.它知道如何执行此操作,因为代码是对象的一部分,而不是外部的代码.
在上面的会计案例中,我认为我们最终将会计科目表作为对象,并且我们告诉它将发票应用于自身.由于它了解这个过程,它知道允许更新哪些帐户(债权人责任帐户和费用帐户,如果我没记错的话).
无论如何,这是无关紧要的,我现在只是在蜿蜒.我所说的是用目标受众理解的术语来表达它.我想这是大多数教学的秘诀.
像所有老屁一样,我想用自己生活中的故事回答这个问题.
我开始在VIC-20上编程基础.不知道其他什么,我虽然这是所有计算机的编程方式.我认为跟踪哪些变量名称以及哪些变量仍然是免费的(范围问题)有点困难.我还认为很难将我的程序划分为可重复的块,使用gosub-return并设置和读取这些将使用的变量(缺少方法).
然后我通过MS-DOS进入Turbo C. 现在我可以创建自己的方法和功能!我不再坚持基本的旧有限命令集.我觉得我正在为我编写的每个程序创建一种新语言.C给了我更多表现力.
C++是我听说的第一个面向对象的语言.对我而言,最重要的时刻是我明白我可以创建自己的数据类型,甚至超载运算符.再一次,我觉得我可以创建自己的语言,包含新的功能和数据类型,以及运算符.
这就是我如何向新的程序员出售OO.说明它具有表达能力,因为它们可以定义自己的数据类型.我一直认为封装是比继承更好的卖点.