精华内容
下载资源
问答
  • 分析区域城镇现状空间网络的主要特点和城市分布的下列不属于城镇体系空间布局的工作内容的是()。A.分析区域城镇现状空间网络的主要特点和城市分布下列选项中,不属于城镇体系空间布局工作内容的是()。A.分析区域...

    相关题目与解析

    下列不属于城镇体系空间布局工作内容的是()。A.分析区域城镇现状空间网络的主要特点和城市分布的

    下列不属于城镇体系空间布局的工作内容的是()。A.分析区域城镇现状空间网络的主要特点和城市分布

    下列选项中,不属于城镇体系空间布局工作内容的是()。A.分析区域城镇现状空间网络的主要特点和城

    以下不属于教师网络研修社区必备特征和功能的是()。A.个人空间B.教师工作坊C.生成研修资源D.

    下列内容不属于网络广告特点:A、24小时无间断接纳读者B、反馈效果差,只能用文字与图片进行宣传

    下列不属于网络广告特点的有:A、24小时无间断接纳读者B、反馈效果差,只能用文字与图片进行宣传

    以下不属于防火墙的优点的是()。A.防止非授权用户进入内部网络B.可以限制网络服务C.方便地监视网

    网络犯罪,是指在网络空间内以计算机网络为犯罪工具或攻击对象的危害社会的行为,它具有

    以下描述中属于矢量图优点的是()

    威胁情报的出现将网络空间安全防御从传统被动式防御转移到主动式防御里。传统情报应具备准确性、针对性和及时性等特征,以下不属于安全威胁情报的基本特征的是()

    以下不属于网络营销策划的特点的是()

    以下属于汽车空调的特点的是?

    展开全文
  • 面向对象的三个基本特征是:封装、继承、多态   封装 封装最好理解了。封装是面向对象的特征之一,是对象和类概念的主要特性。 封装,也就是把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的...

    阅读数:634

    面向对象的三个基本特征是:封装、继承、多态

     

    1. 封装

    封装最好理解了。封装是面向对象的特征之一,是对象和类概念的主要特性。

    封装,也就是把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏。

    Java中类中成员的属性有:public, protected, <default>, private,这四个属性的访问权限依次降低。

     

    2.继承

    面向对象编程 (OOP) 语言的一个主要功能就是“继承”。继承是指这样一种能力:它可以使用现有类的所有功能,并在无需重新编写原来的类的情况下对这些功能进行扩展。

    通过继承创建的新类称为“子类”或“派生类”。

    被继承的类称为“基类”、“父类”或“超类”。

    继承的过程,就是从一般到特殊的过程。

    要实现继承,可以通过“继承”(Inheritance)和“组合”(Composition)来实现。

    在某些 OOP 语言中,一个子类可以继承多个基类。但是一般情况下,一个子类只能有一个基类,要实现多重继承,可以通过多级继承来实现。

    继承概念的实现方式有三类:实现继承、接口继承和可视继承。

    Ø         实现继承是指使用基类的属性和方法而无需额外编码的能力;

    Ø         接口继承是指仅使用属性和方法的名称、但是子类必须提供实现的能力;

    Ø         可视继承是指子窗体(类)使用基窗体(类)的外观和实现代码的能力。

    在考虑使用继承时,有一点需要注意,那就是两个类之间的关系应该是“属于”关系。例如,Employee 是一个人,Manager 也是一个人,因此这两个类都可以继承 Person 类。但是 Leg 类却不能继承 Person 类,因为腿并不是一个人。

    抽象类仅定义将由子类创建的一般属性和方法,创建抽象类时,请使用关键字 Interface 而不是 Class。

    OO开发范式大致为:划分对象→抽象类→将类组织成为层次化结构(继承和合成) →用类与实例进行设计和实现几个阶段。

     

    3.多态
    多态性(polymorphisn)是允许你将父对象设置成为和一个或更多的他的子对象相等的技术,赋值之后,父对象就可以根据当前赋值给它的子对象的特性以不同的方式运作。简单的说,就是一句话:允许将子类类型的指针赋值给父类类型的指针。

    实现多态,有二种方式,覆盖,重载。

    覆盖,是指子类重新定义父类的虚函数的做法。

    重载,是指允许存在多个同名函数,而这些函数的参数表不同(或许参数个数不同,或许参数类型不同,或许两者都不同)。

    其实,重载的概念并不属于“面向对象编程”,重载的实现是:编译器根据函数不同的参数表,对同名函数的名称做修饰,然后这些同名函数就成了不同的函数(至少对于编译器来说是这样的)。如,有两个同名函数:function func(p:integer):integer;和function func(p:string):integer;。那么编译器做过修饰后的函数名称可能是这样的:int_func、str_func。对于这两个函数的调用,在编译器间就已经确定了,是静态的(记住:是静态)。也就是说,它们的地址在编译期就绑定了(早绑定),因此,重载和多态无关!真正和多态相关的是“覆盖”。当子类重新定义了父类的虚函数后,父类指针根据赋给它的不同的子类指针,动态(记住:是动态!)的调用属于子类的该函数,这样的函数调用在编译期间是无法确定的(调用的子类的虚函数的地址无法给出)。因此,这样的函数地址是在运行期绑定的(晚邦定)。结论就是:重载只是一种语言特性,与多态无关,与面向对象也无关!引用一句Bruce Eckel的话:“不要犯傻,如果它不是晚邦定,它就不是多态。”

    那么,多态的作用是什么呢?我们知道,封装可以隐藏实现细节,使得代码模块化;继承可以扩展已存在的代码模块(类);它们的目的都是为了——代码重用。而多态则是为了实现另一个目的——接口重用!多态的作用,就是为了类在继承和派生的时候,保证使用“家谱”中任一类的实例的某一属性时的正确调用。

     

     

    概念讲解

    泛化(Generalization)

     

    o_Generalization.gif

    图表 1 泛化

    在上图中,空心的三角表示继承关系(类继承),在UML的术语中,这种关系被称为泛化(Generalization)。Person(人)是基类,Teacher(教师)、Student(学生)、Guest(来宾)是子类。

    若在逻辑上B是A的“一种”,并且A的所有功能和属性对B而言都有意义,则允许B继承A的功能和属性。

    例如,教师是人,Teacher 是Person的“一种”(a kind of )。那么类Teacher可以从类Person派生(继承)。

    如果A是基类,B是A的派生类,那么B将继承A的数据和函数。

    如果类A和类B毫不相关,不可以为了使B的功能更多些而让B继承A的功能和属性。

    若在逻辑上B是A的“一种”(a kind of ),则允许B继承A的功能和属性。

     

    聚合(组合)

    o_aggregationBase.gif

    图表 2 组合

    若在逻辑上A是B的“一部分”(a part of),则不允许B从A派生,而是要用A和其它东西组合出B。

    例如,眼(Eye)、鼻(Nose)、口(Mouth)、耳(Ear)是头(Head)的一部分,所以类Head应该由类Eye、Nose、Mouth、Ear组合而成,不是派生(继承)而成。

     

    聚合的类型分为无、共享(聚合)、复合(组合)三类。

     

    聚合(aggregation)

     

    o_aggregation.gif

    图表 3 共享

    上面图中,有一个菱形(空心)表示聚合(aggregation)(聚合类型为共享),聚合的意义表示has-a关系。聚合是一种相对松散的关系,聚合类B不需要对被聚合的类A负责。

     

    组合(composition)

    o_composition.gif

    图表 4 复合

    这幅图与上面的唯一区别是菱形为实心的,它代表了一种更为坚固的关系——组合(composition)(聚合类型为复合)。组合表示的关系也是has-a,不过在这里,A的生命期受B控制。即A会随着B的创建而创建,随B的消亡而消亡。

     

    依赖(Dependency)

    o_Dependency.gif

    图表 5 依赖

    这里B与A的关系只是一种依赖(Dependency)关系,这种关系表明,如果类A被修改,那么类B会受到影响。

     

     

     

     

     

    面向对象五大原则:

    (1)单一职责原则(Single-Resposibility Principle

     

    •一个类应该仅有一个引起它变化的原因

    职员类例子: 比如在职员类里,将工程师、销售人员、销售经理这些情况都放在职员类里考虑,其结果将会非常混乱,在这个假设下,职员类里的每个方法都要ifelse判断是哪种情况,从类结构上来说将会十分臃肿,并且上述三种的职员类型,不论哪一种发生需求变化,都会改变职员类!这个是大家所不愿意看到的!

     

    (2)开放封闭原则(Open-Closed principle

     

    •对扩展是开放的,对更改是封闭的!

    变化来临时,如果不必改动软件实体裁的源代码,就能扩充它的行为,那么这个软件实体设计就是满足开放封闭原则的。如果说我们预测到某种变化,或者某种变化发生了,我们应当创建抽象类来隔离以后发生的同类变化。

     

    (3)里氏替换原则(Liskov-Substituion Principle

     

    •子类可以替换父类并且出现在父类能够出现的任何地方,贯彻GOF倡导的面向接口编程

    在这个原则中父类应尽可能使用接口或者抽象类来实现!

    子类通过实现了父类接口,能够替父类的使用地方!

    通过这个原则,我们客户端在使用父类接口的时候,通过子类实现!

    意思就是说我们依赖父类接口,在客户端声明一个父类接口,通过其子类来实现

    这个时候就要求子类必须能够替换父类所出现的任何地方,这样做的好处就是,在根据新要求扩展父类接口的新子类的时候而不影响当前客户端的使用!

     

    (4)依赖倒置原则(Dependecy-Inversion Principle

     

    •传统的结构化编程中,最上层的模块通常都要依赖下面的子模块来实现,也称为高层依赖低层!

    所以DIP原则就是要逆转这种依赖关系,让高层模块不要依赖低层模块,所以称之为依赖倒置原则!

     

    (5)ISP 接口隔离原则(Interface-Segregation Principle)

     

    •使用多个专门的接口比使用单个接口要好的多!

    这个我有体会,在我实际编程中,为了减少接口的定义,将许多类似的方法都放在一个接口中,最后发现,维护和实现接口的时候花了太多精力,而接口所定义的操作相当于对客户端的一种承诺,这种承诺当然是越少越好,越精练越好,过多的承诺带来的就是你的大量精力和时间去维护!

    展开全文
  • 面向对象的三个基本特征

    万次阅读 2018-09-05 17:11:31
    面向对象的三个基本特征是:封装、继承、多态。 封装 封装最好理解了。封装是面向对象的特征之一,是对象和类概念的主要特性。 封装,也就是把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的...

    面向对象的三个基本特征是:封装、继承、多态。

    o_OOBase.gif

    封装

    封装最好理解了。封装是面向对象的特征之一,是对象和类概念的主要特性。

    封装,也就是把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏。

    继承

    面向对象编程 (OOP) 语言的一个主要功能就是“继承”。继承是指这样一种能力:它可以使用现有类的所有功能,并在无需重新编写原来的类的情况下对这些功能进行扩展。

    通过继承创建的新类称为“子类”或“派生类”。

    被继承的类称为“基类”、“父类”或“超类”。

    继承的过程,就是从一般到特殊的过程。

    要实现继承,可以通过“继承”(Inheritance)和“组合”(Composition)来实现。

    在某些 OOP 语言中,一个子类可以继承多个基类。但是一般情况下,一个子类只能有一个基类,要实现多重继承,可以通过多级继承来实现。

     

    继承概念的实现方式有三类:实现继承、接口继承和可视继承。

    Ø         实现继承是指使用基类的属性和方法而无需额外编码的能力;

    Ø         接口继承是指仅使用属性和方法的名称、但是子类必须提供实现的能力;

    Ø         可视继承是指子窗体(类)使用基窗体(类)的外观和实现代码的能力。

    在考虑使用继承时,有一点需要注意,那就是两个类之间的关系应该是“属于”关系。例如,Employee 是一个人,Manager 也是一个人,因此这两个类都可以继承 Person 类。但是 Leg 类却不能继承 Person 类,因为腿并不是一个人。

    抽象类仅定义将由子类创建的一般属性和方法,创建抽象类时,请使用关键字 Interface 而不是 Class。

    OO开发范式大致为:划分对象→抽象类→将类组织成为层次化结构(继承和合成) →用类与实例进行设计和实现几个阶段。

     

    多态

    多态性(polymorphisn)是允许你将父对象设置成为和一个或更多的他的子对象相等的技术,赋值之后,父对象就可以根据当前赋值给它的子对象的特性以不同的方式运作。简单的说,就是一句话:允许将子类类型的指针赋值给父类类型的指针。

    实现多态,有二种方式,覆盖,重载。

    覆盖,是指子类重新定义父类的虚函数的做法。

    重载,是指允许存在多个同名函数,而这些函数的参数表不同(或许参数个数不同,或许参数类型不同,或许两者都不同)。

    其实,重载的概念并不属于“面向对象编程”,重载的实现是:编译器根据函数不同的参数表,对同名函数的名称做修饰,然后这些同名函数就成了不同的函数(至少对于编译器来说是这样的)。如,有两个同名函数:function func(p:integer):integer;和function func(p:string):integer;。那么编译器做过修饰后的函数名称可能是这样的:int_func、str_func。对于这两个函数的调用,在编译器间就已经确定了,是静态的(记住:是静态)。也就是说,它们的地址在编译期就绑定了(早绑定),因此,重载和多态无关!真正和多态相关的是“覆盖”。当子类重新定义了父类的虚函数后,父类指针根据赋给它的不同的子类指针,动态(记住:是动态!)的调用属于子类的该函数,这样的函数调用在编译期间是无法确定的(调用的子类的虚函数的地址无法给出)。因此,这样的函数地址是在运行期绑定的(晚邦定)。结论就是:重载只是一种语言特性,与多态无关,与面向对象也无关!引用一句Bruce Eckel的话:“不要犯傻,如果它不是晚邦定,它就不是多态。”

    那么,多态的作用是什么呢?我们知道,封装可以隐藏实现细节,使得代码模块化;继承可以扩展已存在的代码模块(类);它们的目的都是为了——代码重用。而多态则是为了实现另一个目的——接口重用!多态的作用,就是为了类在继承和派生的时候,保证使用“家谱”中任一类的实例的某一属性时的正确调用。

     

    概念讲解

    泛化(Generalization)

    o_Generalization.gif

    图表 1 泛化

    在上图中,空心的三角表示继承关系(类继承),在UML的术语中,这种关系被称为泛化(Generalization)。Person(人)是基类,Teacher(教师)、Student(学生)、Guest(来宾)是子类。

    若在逻辑上B是A的“一种”,并且A的所有功能和属性对B而言都有意义,则允许B继承A的功能和属性。

    例如,教师是人,Teacher 是Person的“一种”(a kind of )。那么类Teacher可以从类Person派生(继承)。

    如果A是基类,B是A的派生类,那么B将继承A的数据和函数。

    如果类A和类B毫不相关,不可以为了使B的功能更多些而让B继承A的功能和属性。

    若在逻辑上B是A的“一种”(a kind of ),则允许B继承A的功能和属性。

     

    聚合(组合)

    o_aggregationBase.gif

    图表 2 组合

    若在逻辑上A是B的“一部分”(a part of),则不允许B从A派生,而是要用A和其它东西组合出B。

    例如,眼(Eye)、鼻(Nose)、口(Mouth)、耳(Ear)是头(Head)的一部分,所以类Head应该由类Eye、Nose、Mouth、Ear组合而成,不是派生(继承)而成。

     

    聚合的类型分为无、共享(聚合)、复合(组合)三类。

     

    聚合(aggregation)

     

    o_aggregation.gif

    图表 3 共享

    上面图中,有一个菱形(空心)表示聚合(aggregation)(聚合类型为共享),聚合的意义表示has-a关系。聚合是一种相对松散的关系,聚合类B不需要对被聚合的类A负责。

     

    组合(composition)

    o_composition.gif

    图表 4 复合

    这幅图与上面的唯一区别是菱形为实心的,它代表了一种更为坚固的关系——组合(composition)(聚合类型为复合)。组合表示的关系也是has-a,不过在这里,A的生命期受B控制。即A会随着B的创建而创建,随B的消亡而消亡。

     

    依赖(Dependency)

    o_Dependency.gif

    图表 5 依赖

    这里B与A的关系只是一种依赖(Dependency)关系,这种关系表明,如果类A被修改,那么类B会受到影响。

     

     

    UML对很多人来说应该不是一个陌生的概念,这一两年来,UML被大家越来越多的讨论着。本来UML跟我这个主题似乎并不能扯上多大的关系(它是语言无关的,甚至可以说其本身就是一种语言——用于交流的)。我在此谈到它有两个目的:
    1. UML是针对面向对象软件开发的,而C++正是这样的一种语言
    2. UML在设计中被越来越多的使用着,而下一篇杂谈准备讨论设计模式,如果不了解UML,那么无法进行下去

    UML,全称:Unified Modeling Language,其目的是为了对软件密集型的制品进行可视化、详述、构造和文档化的图形语言。UML是依据许多前人的思想总结出的成果,1997年被OMG通过并成为标准(所以在《设计模式》书中如果你看到与标准不一样的地方,不要奇怪,那本书是95年的)。关于UML的历史和更详细的描述,可以参考《UML 参考手册》。UML主要由一系列视图组成,其中包括静态视图(Static view),用例视图(Use case view)活动视图(Activity view)等,不同的图用处自然也不一样,而对开发人员来讲(或者说为我的下一篇来说),更重要的应该是静态视图中的类图(class diagram)和交互视图(Interaction view)中的顺序图(Sequence diagram),请注意view和diagram的区别。

     类图
    静态视图说明了对象的结构,其中最常用的就是类图,类图可以帮助我们更直观的了解一个系统的体系结构,有时侯,描述系统快照的对象图(Object diagram)也是很有用的。在这里,我们主要介绍类图,下面的图就是一个简单的类图:

    在类图中,类由矩形框来表示,如上图中,定义了4个类,分别为Base、A、B、C,类之间的关系通过各种线条和其他符号来表示,在上图中,空心的三角表示继承关系,在UML的术语中,这种关系被称为泛化(Generalization),所以上面的类用等价代码表示为:
    class Base{…};
    class A:public Base{…};
    class B:public Base{…};
    class C:public Base{…};

    我们再看下一幅图:

    这幅图与上幅几乎没有什么区别,唯一的不同就是Base类中增加了成员,一个私有的integer _x(UML术语为property)和一个公有的fun()的函数(method),是否需要这些类的内部细节UML本身并没有限制,完全取决于你自己如何使用,UML的用处在于帮助你了解系统,所以只要你自己觉得足够清楚,那么够了,不要再复杂了。
    接着看第三幅图:

    上面图中的箭头表示一种关系,箭头另一边有一个菱形(空心)表示聚合(aggregation),聚合的意义表示has-a关系,其等价代码如下:
    class A{…};
    class B{ A* theA;…};
    聚合是一种相对松散的关系,聚合类B不需要对被聚合的类A负责。
    下面的图:

    这幅图与上面的唯一区别是菱形为实心的,它代表了一种更为坚固的关系——组合(composition)。组合表示的关系也是has-a,不过在这里,A的生命期受B控制,通常情况,等价代码如下:
    class A{…};
    class B{A theA;…};
    即A会随着B的创建而创建,随B的消亡而消亡。

    下图:

    这里B与A的关系只是一种依赖关系,这种关系表明,如果类A被修改,那么类B会受到影响,一个简单的例子就是:
    class A{…};
    class B{fun(A params);…};

    常用的关系就是我们上面用的这些,通过这些关系和类表示的类图,我们可以用图形化的方式描述一个系统的设计部分,当你习惯使用UML后,你会发现,这往往比你告诉同伴某某类从某某类派生,派生类又和某某类具有什么关系容易的多。

     顺序图:
    UML中另外一个常用的图形就是交互视图中的顺序图,在以往的过程化语言中,我们通常使用流程图来描述一个函数(系统)是如何工作的,而在面向对象的系统中,这显然是不可行的,而顺序图正是来解决这个问题的。
    假设有如下的伪代码:

    
     

    对于下面的调用:
    window wnd;
    wnd.drawcircle();
    对应的顺序图如下:

     

    图中上方的方块表示参与的对象,垂直的虚线表示对象的生命线,方框表示激活,其中箭头表示了一个调用消息(也可以有回送return),如果是异步的消息,则用半箭头表示,其中draw表示了一个自调用(self call)

    至此,UML中最常用的(从开发人员的角度),当然UML的内容远远不只这些,这里的介绍只是一些简单的概括,并且UML本身也在不断的发展之中,无论怎样,我觉得UML会越来越多的深入我们的开发过程中,特别是对下一篇我们要介绍的设计模式而言,类图是主要的描述工具(到那个时候你会体会到UML描述的优越)。
    如果你看过《设计模式》着本书,你会发现与我上面所描述的有一些细微的不同,不要紧张,《设计模式》是GOF95年的作品,那时候UML还没有形成,而且,其中也明确那是OMT方法(Jim Rumbaugh在通用电气发表的建模技术——Object Modeling Technique)和Booch方法。如果你觉得UML有些让你无所适从,也不必紧张,UML本身只是一个辅助工具,它的目的是帮助你描述系统,不是复杂你的工作,如果你的系统很简单,一句话可以说的很清楚,那么不要用UML,如果你只想说明类之间的关系,而不是类的接口描述,那么像第一副图那样简单的描述就很好,总之不要去追求细节,只要能说明问题,那么你的目的就达到了(甚至你没有必要完全遵守规范)。

     参考书目
    《设计模式——可复用面向对象软件的基础》 
    作者: Erich Gamma 等 译者:李英军 马晓星 蔡敏 刘建中 机械工业出版社2000

    《UML参考手册》作者: James Rumbaugh Ivar Jacobson Grady Booch
    译者: 姚淑珍 唐发根 机械工业出版社2001

    《UML精粹——标准对象建模语言简明指南(第2版)》
    作者: Martin Fowler&Kendall Scott 译者: 徐家福 清华大学出版社 2002

    《Design Patterns Explained》Alan Shalloway, James R. Trott
    Addison-Wesley Pub 2001

     

    展开全文
  • 对象具有特征(属性)和行为(方法)。 面向对象:可以创建自定义的类型,很好的支持继承和多态。 面向对象特征:封装、继承、多态。 对象简介 基本数据类型和引用数据类型的对比 基本数据类型(值类型):...

    面向对象简介

    对象的作用是:封装信息。比如Student类里可以封装学生的姓名、年龄、成绩等。

    对象具有特征(属性)和行为(方法)。

    面向对象:可以创建自定义的类型,很好的支持继承和多态。

    面向对象的特征:封装、继承、多态。

    对象简介

    基本数据类型和引用数据类型的对比

    • 基本数据类型(值类型):String 字符串、Number 数值、Boolean 布尔值、Null 空值、Undefined 未定义。

    • 引用数据类型(引用类型):Object 对象。

    基本数据类型

    基本数据类型的值直接保存在栈内存中,值与值之间是独立存在,修改一个变量不会影响其他的变量。

    对象

    只要不是那五种基本数据类型,就全都是对象。

    如果使用基本数据类型的数据,我们所创建的变量都是独立,不能成为一个整体。

    对象属于一种复合的数据类型,在对象中可以保存多个不同数据类型的属性。

    对象是保存到堆内存中的,每创建一个新的对象,就会在堆内存中开辟出一个新的空间。变量保存的是对象的内存地址(对象的引用)。

    换而言之,对象的值是保存在堆内存中的,而对象的引用(即变量)是保存在栈内存中的。

    如果两个变量保存的是同一个对象引用,当一个通过一个变量修改属性时,另一个也会受到影响

    例如:

    	var obj = new Object();
    	obj.name = "孙悟空";
    
    	var obj2 = obj;
    
    	//修改obj的name属性
    	obj.name = "猪八戒";
    

    上面的代码中,当我修改obj的name属性后,会发现,obj2的name属性也会被修改。因为obj和obj2指向的是堆内存中的同一个地址。

    对象的分类

    1.内置对象:

    • 由ES标准中定义的对象,在任何的ES的实现中都可以使用

    • 比如:Math、String、Number、Boolean、Function、Object…

    2.宿主对象:

    • 由JS的运行环境提供的对象,目前来讲主要指由浏览器提供的对象。

    • 比如 BOM DOM。比如consoledocument

    3.自定义对象:

    • 由开发人员自己创建的对象

    对象的基本操作

    创建对象

    使用new关键字调用的函数,是构造函数constructor。构造函数是专门用来创建对象的函数

    例如:

    	var obj = new Object();
    

    另外,使用typeof检查一个对象时,会返回object

    向对象中添加属性

    在对象中保存的值称为属性。

    向对象添加属性的语法:

    	对象.属性名 = 属性值;
    

    举例:

        var obj = new Object();
    
        //向obj中添加一个name属性
        obj.name = "孙悟空";
    
        //向obj中添加一个gender属性
        obj.gender = "男";
    
        //向obj中添加一个age属性
        obj.age = 18;
    
        console.log(JSON.stringify(obj)); // 将 obj 以字符串的形式打印出来
    

    打印结果:

    	{
    		"name":"孙悟空",
    		"gender":"男",
    		"age":18
    	}
    

    补充1:对象的属性值可以是任何的数据类型,也可以是个函数:(也称之为方法)

        var obj = new Object();
        obj.sayName = function () {
            console.log('smyhvae');
        };
    
        console.log(obj.sayName);  //没加括号,获取的是对象
        console.log('-----------');
        console.log(obj.sayName());  //加了括号,执行函数内容,并执行函数体的内容
    
    

    打印结果:

    在这里插入图片描述

    补充2:js中的属性值,也可以是一个对象

    举例:

        //创建对象 obj1
        var obj1 = new Object();
        obj1.test = undefined;
    
        //创建对象 obj2
        var obj2 = new Object();
        obj2.name = "smyhvae";
    
        //将整个 obj2 对象,设置为 obj1 的属性
        obj1.test = obj2;
    
        console.log(obj1.test.name);
    

    打印结果为:smyhvae

    获取对象中的属性

    方式1

    语法:

    	对象.属性名
    

    如果获取对象中没有的属性,不会报错而是返回undefined

    举例:

        var obj = new Object();
    
        //向obj中添加一个name属性
        obj.name = "孙悟空";
    
        //向obj中添加一个gender属性
        obj.gender = "男";
    
        //向obj中添加一个age属性
        obj.age = 18;
    
        // 获取对象中的属性,并打印出来
        console.log(obj.gender); // 打印结果:男
        console.log(obj.color);  // 打印结果:undefined
    

    方式2:可以使用[]这种形式去操作属性

    对象的属性名不强制要求遵守标识符的规范,但是我们使用是还是尽量按照标识符的规范去做。

    但如果要使用特殊的属性名,就不能采用.的方式来操作对象的属性。比如说,123这种属性名,如果我们直接写成obj.123 = 789,是会报错的。那怎么办呢?办法如下:

    语法格式如下:(读取时,也是采用这种方式)

    对象["属性名"] = 属性值
    
    

    上面这种语法格式,举例如下:

     obj["123"] = 789;
    

    重要:使用[]这种形式去操作属性,更加的灵活,因为,我们可以在[]中直接传递一个变量,这样变量值是多少就会读取那个属性。

    修改对象的属性值

    语法:

    	对象.属性名 = 新值
    
    	obj.name = "tom";
    

    删除对象的属性

    语法:

    	delete obj.name;
    

    in 运算符

    通过该运算符可以检查一个对象中是否含有指定的属性。如果有则返回true,没有则返回false。

    语法:

    	"属性名" in 对象
    

    举例:

    	//检查obj中是否含有name属性
    	console.log("name" in obj);
    

    我们平时使用的对象不一定是自己创建的,可能是别人提供的,这个时候,in 运算符可以派上用场。

    对象字面量

    如果要创建一个对象,我们可以使用下面这种方式:

    	var obj = new Object();
    

    但是上面的这种方式,比较麻烦,我们还有更简洁的方式来创建一个对象。如下。

    使用对象字面量来创建一个对象:

    	var obj = {};
    

    使用对象字面量,可以在创建对象时,直接指定对象中的属性。语法:{属性名:属性值,属性名:属性值…}

    例如:

    	var obj2 = {
    
    		name: "猪八戒",
    		age: 13,
    		gender: "男",
    		test: {
    			name: "沙僧"
    		}
    		//我们还可以在对象中增加一个方法。以后可以通过obj2.sayName()的方式调用这个方法
    		sayName: function(){
    			console.log('smyhvae');
    		}
    	};
    

    对象字面量的属性名可以加引号也可以不加,建议不加。如果要使用一些特殊的名字,则必须加引号。

    属性名和属性值是一组一组的键值对结构,键和值之间使用:连接,多个值对之间使用,隔开。如果一个属性之后没有其他的属性了,就不要写,,因为它是对象的最后一个属性。

    遍历对象中的属性:for in

    语法:

    	for (var 变量 in 对象) {
    
    	}
    

    解释:对象中有几个属性,循环体就会执行几次。每次执行时,会将对象中的每个属性的 属性名 赋值给变量

    举例:

    <!DOCTYPE html>
    <html>
    
    <head>
    	<meta charset="UTF-8">
    	<title></title>
    	<script type="text/javascript">
    		var obj = {
    			name: "smyhvae",
    			age: 26,
    			gender: "男",
    			address: "shenzhen"
    		};
    
    		//枚举对象中的属性
    		for (var n in obj) {
    			console.log("属性名:" + n);
    			console.log("属性值:" + obj[n]); // 注意,因为这里的属性名 n 是变量,所以,如果想获取属性值,不能写成 obj.n,而是要写成 obj[n]
    		}
    	</script>
    </head>
    
    <body>
    </body>
    
    </html>
    
    

    打印结果:

    在这里插入图片描述

    展开全文
  • C++编程入门系列之十二(类与对象:面向对象设计的基本思想和特点)上一讲鸡啄米讲了函数重载和函数模板以后,C++和C语言相似的语法就剩下后面要讲的数组了,这一讲开始鸡啄米就要讲C++所特有的一些概念和思想了。...
  • Java面向对象的三大基本特征 文章目录Java面向对象的三大基本特征学习目标一、学习步骤1.封装2.继承3.多态总结 学习目标 熟练掌握三大基本特征的的概念与应用 一、学习步骤 1.封装 学习封装我们需要了解类和对象...
  • 面向对象OOP的三个基本特征

    千次阅读 2016-09-28 12:18:53
    封装:封装就是要把属于同一类事物的共性(包括属性与行为)归到一个类中 继承:有些事物有共性,但还存在区别 多态:对这件抽象的事, 对于每个个体(具体)又能找到其自身的行为去执行
  • 面向对象的一些基本核心概念

    千次阅读 2016-12-19 12:00:27
    1.面向对象的三个基本特征是:封装、继承、多态。 1.1封装 封装最好理解了。封装是面向对象的特征之一,是对象和类概念的主要特性。 封装,也就是把客观事物封装成抽象的类,并且类可以把自己...
  • 众所周知,面向对象的三个基本特征是封装、继承和多态。 笔者所理解的封装是指将某事物的属性和行为包装到对象中,这个对象只对外公布需要公开的属性和行为,而这个公布也是可以有选择性的公布给其它对象。在java...
  • 面向对象编程基本概念

    千次阅读 2018-04-18 15:41:53
    面向对象编程(OOP)为软件社区引入了一场革命,以帮助解决这些问题。 OOP专注于模块化,改变容忍度,代码重用,易于理解和分布式开发。今天大多数项目都使用面向对象的概念。由于C ++引入了OOP,因此用户体验已经...
  • 面向对象基本定义及概念

    千次阅读 2015-08-15 14:30:57
    面向对象基本特征 抽象: 抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面。抽象并打算了解全部问题,而只是选择其中的一部分,暂时不用部分细节。抽象包括两个方面,...
  • 众所周知,面向对象的三个基本特征是封装、继承和多态。 笔者所理解的封装是指将某事物的属性和行为包装到对象中,这个对象只对外公布需要公开的属性和行为,而这个公布也是可以有选择性的公布给其它对象。在java...
  • Python使用类(class)和对象(object),进行面向对象(object-oriented programming,简称OOP)的编程。面向对象的最主要目的是提高...下面是对面向对象的一种理解,基于分类。 相近对象,归为类 在人类认知
  • 早期方法的不足: 早期的方法只使用一种系统的视角作为构造块,而没有容纳其他视角。 1、结构化分析和设计方法集中于将功能作为系统的构造块...为了克服传统开发方法的不足,面向对象方法解决问题的思路 是从现实世...
  • 面向对象基本概念

    千次阅读 热门讨论 2020-09-06 08:43:02
    结构化程序设计 ➢结构化程序设计的基本方法:采用自顶向下、逐步求精及模块化的思想,将复杂的大问题层层分解为许多 简单的小问题。 ➢结构化程序设计的三种基本结构:... ➢这种情况下,面向对象的程序设计方...
  • 在面向对象的编程中,首先要清楚地理解面向对象编程的三个基本特征: 封装, 继承, 多态!封装:更确切地说,是对象封装。就是每个对象都包含自己进行某种操作时所需要的所有信息,而依赖于其他对象来完成该操作。 ...
  • 面向对象基本概念

    千次阅读 2009-12-07 14:14:00
    您查询的关键词是:实例对 private protected 的访问 。如果打开速度慢,可以尝试快速版;如果想保存快照,可以添加到搜藏。(百度和网页...百度快照谨为网络故障时之索引,代表被搜索
  • 面向对象基本思想

    千次阅读 2013-08-08 12:18:09
    面向对象基本思想 定义 面向对象是一种对现实世界理解和抽象的方法,是计算机编程技术[1]发展到一定阶段后的产物。早期的计算机编程是基于面向过程的方法,例如实现算术运算1+1+2 = 4,通过设计一个算法就...
  • 1. 面向对象程序设计的基本概念 Java是一种面向对象的编程语言。面向对象编程,英文是Object-Oriented Programming,简称OOP。 那什么是面向对象编程? 面向对象其实是现实世界模型的自然延伸。可以将现实世界中的...
  • 面向对象的五大基本原则

    千次阅读 2016-12-03 19:19:35
    面向对象的5大基本设计原则: 单一职责原则(Single-Resposibility Principle)  其核心思想为:一个类,最好只做一件事,只有一个引起它的变化。单一职责原则可以看做是低耦合、高内聚在面向对象原则上的...
  • 最近我也在读一些书籍,如果见到有价值的我将记录在此,并分享给大家...OOP全称Object Oriented Programming,即为面向对象程序设计。它是一种计算机编程架构。         OO...
  • 面向对象设计的五项基本原则

    千次阅读 2017-02-13 22:28:58
    面向对象设计(OOD)是面向对象编程(OOP)必可少的一个环节,只有好的设计,才能保障程序的质量。面向对象设计的主要任务就是类的设计,不少面向对象(OO)的先驱和前辈已经提出了很多关于类的设计原则,用于指导...
  • Java基础第三篇(上)------面向对象基本概念    本文主要基于面向对象着重阐述关于面向对象的几个关键字和其中的思想   一、类  中国有句古话叫物以类聚,人以群分。也就是说万物都有相通之处,而在java...
  • Java面向对象编程三大特征 - 多态

    千次阅读 多人点赞 2020-04-06 11:43:48
    本文关键字:Java、面向对象、三大特征、多态。多态是面向对象编程的三大特征之一,是面向对象思想的终极体现之一。在理解多态之前需要先掌握继承、重写、父类引用指向子类对象的相关概念。
  • Java-面向对象-000-基本知识

    千次阅读 2020-03-04 16:06:55
    java-面向对象-001-基本知识 以时钟为例,理解类和对象
  • 万事万物皆对象, 任何实际占据内存的东西皆可以看成是对象Object(对象,物体), JavaScript 中的所有事物都是对象:字符串、数值、数组、函数.
  • Mybatis的基本要素--核心对象

    千次阅读 2019-04-16 09:34:11
    大家好啊,今天呢来说下Mybatis的核心对象,也就是说基本三要素. 核心接口和类。 Mybatis核心配置文件(mybatis-config.xml) SQL映射文件 一、下面首先介绍Mybatis的核心接口和类。 (1) 每个MyBatis的应用程序...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 143,096
精华内容 57,238
关键字:

下面不属于对象基本特点的是