对面向对象的理解

45 篇文章 1 订阅
30 篇文章 0 订阅

一句话解释什么是对象!

所谓对象,就是抽象化的数据本身


面向对象有三大特性:封装继承多态


对象与类的区别

类是抽象的,不占用存储空间;而对象具体的,占用存储空间。


面向对象的产生原因

面向对象的编程产生的历史原因:由于面向过程编程在构造系统时,无法解决重用,维护,扩展的问题,而且逻辑过于复杂,代码晦涩难懂,因此,人们开始想能不能让计算机直接模拟现实的环境,以人类解决问题的方法,思路,习惯和步骤来设计相应的应用程序。于是,面向对象的编程思想就产生了。


面向对象的编程的主要思想是把构成问题的各个事物分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描述一个事物在解决问题的过程中经历的步骤和行为。对象作为程序的基本单位,将程序和数据封装其中,以提高程序的重用性,灵活性和可扩展性。类是创建对象的模板,一个类可以创建多个对象。对象是类的实例化。


面向对象与基于对象的区别

面向对象和基于对象都有封装的概念,但是基于对象没有继承和多态


面向对象编程分为几部?

面向对象是一种思想,他让我们在分析和解决问题时,把思维和重点转向现实中的客体中来,然后通过UML工具理清这些客体之间的联系,最后用面向对象的语言实现这种客体以及客体之间的联系。它分为面向对象的分析(OOA),面向对象的设计(OOD),面向对象的编程实现(OOP)三个大的步骤。
  1、首先是分析需求,先不要思考怎么用程序实现它,先分析需求中稳定不变的客体都是些什么,这些客体之间的关系是什么。
  2、把第一步分析出来的需求,通过进一步扩充模型,变成可实现的、符合成本的、模块化的、低耦合高内聚的模型。
  3、使用面向对象的实现模型 


面向对象编程,即OOP,是一种编程范式,满足面向对象编程的语言,一般会提供类、封装、继承等语法和概念来辅助我们进行面向对象编程。

类型被设计为将数据和行为捆绑在一起的一种东西,数据和行为被称之为类型的成员。我们可以创建类型的实例,不同的实例包含不同的数据,从而其表现出来的行为也会不同,尽管其代码是一样的。

面向对象编程最初是为了解决GUI程序设计问题所提出的,后来面向对象编程被发现也比较适合用于许多特定领域的开发。面向对象编程是目前运用最为广泛的一种编程范式,从而也产生了非常多的解决代码复用的技巧,其中相当一部分技巧在程序中反复出现而被提炼为设计模式。


封装
封装使得类的成员得以有选择性的暴露。一些成员只在类型的内部使用,被称之为私有的(private),一些成员可以被派生类型使用,称之为受保护的(protected),一些成员可以被任何东西使用,称之为公开的(public)。而某些语言还提供了内部的(internal)这样的访问修饰符来标识一些只能被同一个程序集或者包使用的成员。
概念:封装也称为信息隐藏,是指利用抽象数据类型将数据和基于数据的操作封装在一起,使其构成一个不可分割的独立实体,数据被保护在抽象数据类型的内部,尽可能地隐藏内部的细节,只保留一些对外接口使之与外部发生联系。系统的其他部分只有通过包裹在数据外面的被授权的操作来与这个抽象数据类型交流 与交互。也就是说,用户无需知道对象内部方法的实现细节,但可以根据对象提供的外部接口(对象名和参数)访问该对象。
好处:
(1)实现了专业的分工。
将能实现某一特定功能的代码封装成一个独立的实体后,各程序员可以在需要的时候调用,从而实现了专业的分工。
(2)隐藏信息,实现细节。
通过控制访问权限可以将可以将不想让客户端程序员看到的信息隐藏起来,如某客户的银行的密码需要保密,只能对该客户开发权限。 

继承
继承:子类拥有父类的所有属性,和方法。
继承可以从一个现有类型派生出新的类型来,派生类继承了基类的所有成员,也可以新增只属于自己的成员。在任何情况下,派生类类型的实例可以被当做基类类型的实例来使用。
继承的好处:抽取出了重复的代码,减少代码冗余
继承的缺点:耦合性太强
继承的使用注意
(1)OC中不允许子类和父类拥有相同名称的成员变量名;
(2)OC中的子类可以拥有和父类相同名称的方法,在子类调用时,优先去自己的内部寻找,如果没有则一层一层的往上找;
在子类中重写父类的方法,会覆盖父类的方法。
super关键字:
super关键字,在子类中重写方法时,可以让调用者跳过这一层而调用父类中的方法。
使用场景:子类在重写父类方法时,想要保留父类的一些行为。

多态
没有继承,就没有多态。
多态:不同类的对象能够定义相同名称的方法。
虚方法为派生类修改基类的行为提供了一个途径,通过重写(override)虚方法可以修改基类某些方法的行为。当派生类实例被当做基类实例来使用时,这一行为的区别将会被体现出来,这种在运行时不同类型的实例在同样的代码中呈现出完全不同行为的现象被称之为多态。
当父类对象的指针或引用指向子类对象时,会进行动态监测,调用真实的方法。
C++只有虚函数才能实现多态,OC中所有方法都可以。
理解:子类以父类的身份出现,但做事情时还是以自己的方法实现。子类以父类 的身份出现需要向上转型(upcast),其中向上转型是由JVM自动实现的, 是安全 的,但向下转型(downcast)是不安全的,需要强制转换。子类以父类的身份出现 时自己特有的属性和方法将不能使用。




  • 6
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值