Questions tagged «object-oriented»

8
OOP在实践中解决了哪些程序编程问题?
我已经读过《 C ++ Demystified》一书。现在,我开始阅读Robert Lafore的“ Turbo C ++第一版(第1版)中的面向对象程序设计”。除了这些书之外,我没有编程方面的知识。这本书已经有20年历史了,所以可能已经过时了。我确实有最新版本,因为我喜欢旧版本,所以我正在使用旧版本,主要是我只是通过Lafore的第一版研究C ++中使用的OOP的基本概念。 Lafore的书强调“ OOP”仅对较大和复杂的程序有用。在每本OOP书中(以及在Lafore的书中)都说过,程序范式容易出错,例如全局数据容易受到功能的影响。据说程序员可以用程序语言编写诚实的错误,例如通过创建一个意外破坏数据的函数。 老实说,我发布问题是因为我没有掌握本书给出的解释:C ++中的面向对象编程(第4版)我没有掌握Lafore本书中写的这些语句: 之所以开发面向对象的程序设计,是因为在早期的编程方法中发现了局限性。...随着程序变得越来越大,越来越复杂,甚至结构化编程方法也开始显示出紧张的迹象....分析原因这些失败表明程序范式本身存在弱点。不管结构化编程方法的实现程度如何,大型程序都变得过于复杂。……有两个相关的问题。首先,功能可以不受限制地访问全局数据。其次,不相关的功能和数据是程序范式的基础,为现实世界提供了糟糕的模型。 我已经学习了Jeff Kent的书“ dysmystified C ++”,我非常喜欢这本书,这本书中主要是对过程编程的说明。我不明白为什么程序(结构化)编程很弱! Lafore的书通过一些很好的例子很好地解释了这个概念。另外,通过阅读Lafore的书,我已经掌握了一种直觉,即OOP比过程编程要好,但是我很好奇,实际上,过程编程要比OOP弱。 我想看看自己在过程式编程中将面临的实际问题是什么,OOP如何使编程更容易。我想我只是沉思地阅读Lafore的书就能得到答案,但是我想亲眼看看程序代码中的问题,我想看看程序的OOP样式代码如何消除前面提到的错误。使用程序范例编写相同的程序。 OOP有很多功能,我理解没有人可以向我解释所有这些功能如何消除以程序样式编写代码会产生的上述错误。 所以,这是我的问题: OOP解决了程序编程的哪些限制,并且在实践中如何有效消除这些限制? 特别是,是否存在使用程序范例难以设计但易于使用OOP设计的程序的示例? PS:交叉发布于:https : //stackoverflow.com/q/22510004/3429430


3
通过推断类型自动向下转换
在Java中,必须显式转换以向下转换变量 public class Fruit{} // parent class public class Apple extends Fruit{} // child class public static void main(String args[]) { // An implicit upcast Fruit parent = new Apple(); // An explicit downcast to Apple Apple child = (Apple)parent; } 除了Java不执行任何类型推断的事实外,是否还有其他原因可以满足此要求? 使用新语言实现自动向下转换是否存在任何“陷阱”? 例如: Apple child = parent; // no …

3
抽象数据类型和对象之间有什么区别?
关于Programmers.SE的答案描述了Cook的一篇论文(对象不是ADT)说的是 对象在类型的值上表现得像特征函数,而不是代数。对象使用过程抽象而不是类型抽象 ADT通常在程序中具有唯一的实现。当某人的语言具有模块时,可以实现ADT的多种实现,但通常不能互操作。 在我看来,在库克的论文中,恰好是这样一种情况:对于库克论文中使用的集合的特定示例,可以将一个对象视为特征函数。我不认为对象通常可以视为特征函数。 另外,Aldritch的论文互操作性的力量:为什么对象不可避免 ¹暗示了 Cook的定义实质上将动态调度识别为对象的最重要特征 同意这一点,并同意艾伦·凯说的话 对我来说,OOP意味着仅消息传递,本地保留和保护以及状态过程的隐藏以及所有事物的极端后期绑定。 但是,这些伴随 Aldritch论文的演讲幻灯片表明,Java 类是ADT,而Java接口是对象-的确,使用接口“对象”可以互操作(如上面的要点之一所述,OOP的主要功能之一) )。 我的问题是 我是否正确地说特征函数不是对象的关键特征,而弗兰克·希亚尔(Frank Shearar)错误呢? 即使对象不使用动态分派,数据是否仍通过Java接口的对象示例相互通信?为什么?(我的理解是动态调度更加灵活,并且接口是迈向目标C / smalltalk / erlang样式消息传递的一步。) 依赖倒置原理的思想是否与ADT和对象之间的区别有关?(请参阅Wikipedia页面或The Talking Objects:有关面向消息的编程的故事)尽管我是这个概念的新手,但我了解它涉及在程序的“各层”之间添加接口(请参阅Wikipedia页面图)。 如果需要,请提供其他示例/说明,以区分对象和ADT。 ¹ 本文(于2013年出版)易于阅读,并以Java实例总结了Cook的2009年论文。我强烈建议至少略读一下,不要回答这个问题,而只是因为它是一篇好论文。

5
OOP中对象状态的定义
我需要在面向对象的编程中(针对论文)对“对象的状态”进行简洁的定义。 在大约半天的时间里,我搜索了一篇可以引用该主题的论文,但找不到。我发现的所有论文大部分都是有关面向对象程序设计的常规论文,它们没有定义对象的状态。 我不确定,但是我的最佳猜测是: 对象的状态由对象的实例变量的状态定义。 我正在搜索对象状态的定义和/或关于主题的引用。 (顺便说一句,我可以将这个概念称为“对象状态”吗?还是不常见?)
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.