我正在努力解释java中的oop概念。
oop的一个主要原则是物体有方法;所以Object.method();作品。 我将其与程序编程进行对比,其中必须使用方法(对象)。
这称为封装吗?
oop方式的优点是什么?
答案 0 :(得分:4)
这是一个很大的问题,答案填写了多本书,但简而言之,班级成员有访问修饰符(公共,私有,受保护)。私有成员可以被其他类成员访问,例如方法,但不能访问外部函数。
答案 1 :(得分:2)
在场景 Object.doSomething()中,对象将完全控制其在方法中使用的属性。
但是在另一个调用 doSomething(Object)中,您必须公开对象的所有属性,以便它们在方法中可用。这不是一个更安全的操作。
答案 2 :(得分:1)
OOP的另外两个优点是重用和多态。
<强>重用:强>
如果您在一个文件或一个程序中使用doSomething(Object)
,它可能适用于该程序。现在,假设您需要在另一个程序中使用Object
。您需要在新程序中复制doSomething()
方法(可能会复制并粘贴它)。这可能有用,但这是不好的做法,并使维持这种逻辑成为一场噩梦。如果doSomething()
逻辑是Object
内的一个函数,则该逻辑与该对象“存在”。
<强>多形性:强>
想象一下另一种情况,其中Object只是众多相似类型中的一种。如果您利用接口,许多对象可以实现doSomething()
功能以满足其特定需求。
示例:
interface ICar
{
void doSomething();
void getFuel();
}
class GasCar : ICar
{
public void doSomething()
{
//do something a gas car would do
}
public void getFuel()
{
//logic to pull gas out of a tank
}
}
class ElectricCar : ICar
{
public void doSomething()
{
//do something an electric car would do
}
public void getFuel()
{
//logic to pull fuel out of a battery
}
}
答案 3 :(得分:1)
请记住另一个答案。当您执行method(object)并且方法是这样实现的:
method(obj)
{
return obj.getA()+obj.getB()
}
这很糟糕,因为稍后您想再次执行相同的操作时,代码在哪里?我的意思是,它使用A和B,所以您要查找的第一个地方是obj,但它不在那里!现在您必须去搜索。
OO与组织代码以查找和重用它一样重要。
tl;暴怒
您会看到很多这样的带有bean模式的代码-由于这个原因,我已经将bean视为OO编程中最隐蔽的弊端之一。从理论上讲,如今这些豆大多数都被称为“ Pojos”,因为您可以在其中实现实际的方法,但是人们仍然坚持只使用setter和getter的豆子,这绝不是OO,实际上,它们鼓励的代码不是OO (与OO相比,bean更像是像C这样的非oo语言的数据结构)。
答案 4 :(得分:0)
OOP宣传封装;因此,状态和行为被封装在表示对象的类中。根据封装发生的级别,采用静态(类级别)或实例(对象级别)封装。
答案 5 :(得分:0)
方法(Object)是一种适用于数据结构的范例。数据结构是关于对语义一致且相关的信息字段进行分组(即struct Person {FirstName,LastName,DateOfBirth})。
面向对象的编程比数据结构高出一步。在OOP中,我们不仅对相关的数据字段进行分组,还包括与数据相关的函数(方法,成员函数)(以正确的方式对数据进行操作)。
封装是指将部分成员保密到对象。目标是“隐藏”内部工作与外部世界,并保护对象的状态免受“腐败”或被分配不正确的值。 OOP语言提供了几个“访问修饰符”,用于指定特定类别的对象是否可以访问给定成员(子类的实例,同一“包/命名空间/库”中的类,任何其他类等)。 )。
object.method()通常是要求对象执行某些可能涉及访问在类外无法访问的字段的内容。
以上是定义和解释成员函数(方法)的概念以及封装的概念如何相辅相成。
Referrences:
http://en.wikipedia.org/wiki/Encapsulation_%28object-oriented_programming%29
http://en.wikipedia.org/wiki/Object-oriented_programming