编程思想(一):面向对象思想及衍生特性

1、为什么要使用面向对象的思想进行程序设计?
a、 好处:使用面向对象能让开发变得更简单高效,易于维护。
b、 难点:
如何设计可重用的类是开发过程中的难点,且最耗费时间精力,当然这是核心编程人员的工作内容。
如果你只想成为一个普通的码农,而不是真正意义上的程序员,你只需要关注,如何调用这些类,并熟练使用即可
2、面向对象思想的起源
早期将所有问题抽象为算法,现在将问题的元素抽象为项目的多个对象,多个对象之间进行组合,灵活地解决实际问题。从某种层面上来说,面向对象的思想,是一种更好的语言抽象方法。所有的编程语言,最终目的是提供一种抽象方法。
a、现实问题:我们设计程序,就是通过计算机技术模拟现实,解决项目的业务逻辑,从而创造价值。
b、技术方案
一种是调用现有接口、类,创建对象,并通过逻辑思维,在计算机中实现对现实的模拟。
另一种则是,自己写接口、类,实现业务功能。当然,最常见的情况是两者皆有。调用常用接口,自定义特殊接口(类)
c、必修:若仅仅是调用现有接口实现业务功能,那么必修课就是要熟悉有哪些类可供调用,每个类都有哪些方法
d、重点
若需要自己写类来实现业务功能,那么就意味着我们需要使用面向对象的思想,通过生活经验、业务场景以及洞察力,从现实中抽象出我们需要使用的对象,每个对象都能存储特征(变量)、行为(方法)。
抽象的能力决定了解决问题的复杂程度,抽象的能力取决于两个,一个是抽象的种类(对什么进行抽象),一个是抽象的质量。
e、例如:类是对大量对象的抽象,机器语言抽象出汇编语言,汇编语言抽象出高级语言。
f、编程的挑战/面向对象的最大挑战:准确地为实际要解决的问题模型与机器模型创造联系,且是一一对应的映射关系。
3、关于对象:特征+行为
a、所有东西都是对象,对象存储着数据,可要求对象对自身进行操作
b、可以从要解决的问题中抽取出所有概念组件,这些概念组件组合成一个对象。
c、程序是一大堆对象的组合,每个对象都有自己的空间,可以容纳其他对象。
d、每个对象都有对应的类型,都是一个类的实例。
e、每个对象仅能接受特定的请求(命令/方法),我们向对象发出的请求是通过它的接口(类)定义的,对象的类规定了它的接口形式。所以,我们常常提到的接口可以指:类、也可以指某个方法。
4、面向对象的深入
     从面向对象思想,到将实际问题模型转化成机器模型需要抽象的能力,从早期的算法抽象思维演变为面向对象的抽象思维。从现实问题模型中抽象出类/接口,再到类的创建与调用。类的创建包含两部分,成员变量与成员函数。类的建立直接实现了类的重用性。类的重用性是面向对象的一个重要特性。以上谈的内容都是都是一个类的组成、设计、创建、使用。现在,我们谈谈不同类之间的继承性。类的继承性也是面向对象的一个重要特性。
a、类的设计:想设计好的类,必须要有丰富的经验、对业务场景十分熟悉、以及深刻的洞察力(观察与深入的思考)
b、类的创建:类创建者可以使用权限修饰符对类进行权限管理。
那么为什么需要对类进行权限管理?关于隐藏的实现的设计.因为,类的创建者提供接口的同时,要避免被类的调用者篡改,若类代码被篡改,那么该接口的其他调用者也会受此影响.因此,常常将成员变量隐藏(private),仅提供成员方法的接口(public)。private为类的创建者和调用者之间,竖起一道屏障。
权限修饰符:public、protected、default(friendly封装)、private,public意味着对不同包也是开放的,B包中的类访问A包中的类相当于客户端,也就是调用者
类的结构范围:类内部、类外部(同一个包)、父子类、不同包
c、类的调用:类调用者有权使用该类/接口,但无法接触和修改细节。
d、类的继承
1、继承extends使得子类复制了父类的接口;
2、基础类(父类)与衍生类(子类)有相同的类型。衍生类有基础类的接口,基础类没有衍生类的接口
5、abstract抽象类与interface接口
a、为什么会有抽象类?
      设计程序时,我们希望基础类只为衍生类提供接口。因此,用abstract解决这个问题。抽象类就像一个导师,它有强大的理论基础,但实践能力不强。导师希望能将自己的知识传递下去,但是不希望自己的弟子照搬照套自己的方法。因此,使用abstract关键字修饰类,这样可以防止弟子创建对象(创建抽象类时,编译器会提示),并直接套用自己的方法。这样弟子extends导师的方法,但是具体怎么实现方法,还是靠弟子自己。抽象类和接口就像一个导航,它会告诉你该去什么方向,但是怎么走,还是靠你自己。
      另外,抽象方法只能在抽象类中创建。
b、interface接口
      接口延伸了抽象类的概念,它完全禁止所有函数的定义。接口与接口之间是支持多继承的。
6、对象的存在时间
如何控制对象的存在时间?
a、c++:可以指定在什么时候销毁对象,但是前提是我们要知道对象的类型、数量、存在时间。这种方法的优点是可以在对象使用后就销毁,节省内存空间,提升运行速度,缺点是不够灵活,要设定每个对象在什么时候销毁,开发进度较长。
b、动态地创建和销毁对象:使用垃圾回收器进行销毁对象。通常使用new命令为对象的创建,申请分配内存。内存的分配方式有以下两种。
内存的静态分配方式:分配的内存大小、寿命在编译器就都已确定。
内存的动态分配方式:分配的内存大小、寿命都不确定,例如,内存池就是使用一种动态分配方式。
内存池:内存池也叫内存堆,在运行期,采用动态的方式申请分配内存,由于分配的内存大小不定,因此,在内存分配不够的时候,就会继续申请。若频繁使用内存池,会造成内存碎片(外部碎片),从而降低性能。
内存碎片:分为内部碎片和外部碎片。内存碎片从本质上来看,就是被占用,但不被真正使用的内存空间。
内部碎片:申请内存时,必须申请4、8、16的倍数的内存空间,若此时你需要7个字节大小的内存空间,实际申请的是8个字节的内存空间。这样就有1个字节的内存空间碎片。
外部碎片:申请内存时,是按照内存的地址值的顺序进行申请。例如前20个地址值都被使用了,且有一个内存大小为4个字节的空间刚刚被释放,但是之后创建对象时,若都是申请大于4个字节的空间,那么这个被释放的空间一直处于不能被再次使用的状态。这个空间就是内存(外部)碎片
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值