回忆面向对象思想

 
 
    面向对象,主页君也不敢对其多说什么,毕竟这是一个看似简单,但是其实蕴含很深层次理
 
论的东西,并不是看书就可以理解的,其实也是要在很多实际操作中学习,积累。
 
     面向对象编程(Object Oriented Programming,OOP,面向对象程序设计)是一种计算机
 
编程架构。OOP 的一条基本原则是计算机程序是由单个能够起到子程序作用的单元或对象组
 
合而成。OOP 达到了软件工程的三个主要目标:重用性、灵活性和扩展性。为了实现整体运
 
算,每个对象都能够接收信息、处理数据和向其它对象发送信息。这个是它的基本概念。具体
 
引用自百度百科,百度百科引用自哪我也无从知道了哈。这个概念通俗易懂,是主页君见过的
 
写的比较好的解释了,话说OOP的架构让我们的开发更加敏捷,方便,减少了代码的复杂度,
 
不容易出错,确实是一个很好的编程框架
 
     下面来说几个概念:
 
    1)对象 对象是运行期的基本实体,它是一个封装了数据和操作这些数据的代码的逻辑实
 
体。
 
 
 
  2)类 类是具有相同类型的对象的抽象。一个对象所包含的所有数据和代码可以通过类来
 
构造。
 
 
 
  3)封装 封装是将数据和代码捆绑到一起,避免了外界的干扰和不确定性。对象的某些数
 
据和代码可以是私有的,不能被外界访问,以此实现对数据和代码不同级别的访问权限。
 
 
 
  4)继承 继承是让某个类型的对象获得另一个类型的对象的特征。通过继承可以实现代码
 
的重用:从已存在的类派生出的一个新类将自动具有原来那个类的特性,同时,它还可以拥有
 
自己的新特性。
 
 
 
  5)多态 多态是指不同事物具有不同表现形式的能力。多态机制使具有不同内部结构的对
 
象可以共享相同的外部接口,通过这种方式减少代码的复杂度。
 
 
 
  6)动态绑定 绑定指的是将一个过程调用与相应代码链接起来的行为。动态绑定是指与给
 
定的过程调用相关联的代码只有在运行期才可知的一种绑定,它是多态实现的具体形式。
 
 
 
  7)消息传递 对象之间需要相互沟通,沟通的途径就是对象之间收发信息。消息内容包括
 
接收消息的对象的标识,需要调用的函数的标识,以及必要的信息。消息传递的概念使得对现
 
实世界的描述更容易。
 
 
 
  8)方法 是定义一个类可以做的,但不一定会去做的事。
 
 面向对象主要特征:
 
 
 
  封装性:封装是一种信息隐蔽技术,它体现于类的说明,是对象的重要特性。封装使数据
 
和加工该数据的方法(函数)封装为一个整体,以实现独立性很强的模块,使得用户只能见到
 
对象的外特性(对象能接受哪些消息,具有那些处理能力),而对象的内特性(保存内部状态
 
的私有数据和实现加工能力的算法)对用户是隐蔽的。封装的目的在于把对象的设计者和对象
 
者的使用分开,使用者不必知晓行为实现的细节,只须用设计者提供的消息来访问该对象。
 
 
 
  继承性:继承性是子类自动共享父类之间数据和方法的机制。它由类的派生功能体现。一
 
个类直接继承其它类的全部描述,同时可修改和扩充。继承具有传递性。继承分为单继承(一
 
个子类只有一父类)和多重继承(一个类有多个父类)。类的对象是各自封闭的,如果没继承
 
性机制,则类对象中数据、方法就会出现大量重复。继承不仅支持系统的可重用性,而且还促
 
进系统的可扩充性。
 
 
 
  多态性:对象根据所接收的消息而做出动作。同一消息为不同的对象接受时可产生完全不
 
同的行动,这种现象称为多态性。利用多态性用户可发送一个通用的信息,而将所有的实现细
 
节都留给接受消息的对象自行决定,如是,同一消息即可调用不同的方法。例如:Print消息被
 
发送给一图或表时调用的打印方法与将同样的Print消息发送给一正文文件而调用的打印方法会
 
完全不同。多态性的实现受到继承性的支持,利用类继承的层次关系,把具有通用功能的协议
 
存放在类层次中尽可能高的地方,而将实现这一功能的不同方法置于较低层次,这样,在这些
 
低层次上生成的对象就能给通用消息以不同的响应。在OOP中可通过在派生类中重定义基类函
 
数(定义为重载函数或虚函数)来实现多态性。
 
这三个特征便是OOP的五所不能之处,OC也是遵循了其中的很多特点,当然也有特殊之处。
 
这个就算复习一下知识吧,话说这些东西并不是背的,只有在以后的写程序中多多体会。 

最新文章

  1. tomcat报错java.lang.IllegalArgumentException: Document base XXXXX does not exist or is not a readable directory
  2. [老老实实学WCF] 第九篇 消息通信模式(上) 请求应答与单向
  3. 【并查集】PKU-1182 食物链
  4. linux中fork()函数
  5. 常用的IO流
  6. 【Unity 3D】学习笔记三十五:游戏实例——摄像机切换镜头
  7. rewrap-ajax.js插件
  8. ThinkPHP 5 中AJAX跨域请求头设置方法
  9. CS DevExpress程序启动(主窗体初始化优化)
  10. 根据不同浏览器判断OCX插件是否安装
  11. [规则原则定理]规则原则定理章4 HTTP&RPC
  12. unity 3D 学习笔记
  13. php配置php_pdo_mysql模块
  14. .npy,.mat,.txt转换
  15. jdbctemplate 批量插入
  16. 如果BarTender出现卸载不干净的问题如何处理
  17. (GoRails) Form对象设计风格: 用自建的Model来对参数进行操作。
  18. netty 原理
  19. 20155226 2016-2017-2 《Java程序设计》第5周学习总结
  20. Bootstrap学习js插件篇之提示框

热门文章

  1. mysql的DATE_FORMAT用法
  2. debian/ubuntu安装桌面环境
  3. RabbitMQ服务安装配置
  4. 【小白的CFD之旅】16 流程
  5. .Net 扩展方法集合.
  6. maven私服搭建
  7. java设计模式之组合模式
  8. 与JSP的初次邂逅……
  9. NYOJ 485
  10. Map接口使用注意事项