软件构造课程学习感悟及ADT与OOP理解总结

通过一学期对软件构造的学习,学到了很多知识,对软件构造过程及其各个细节都有了很多的认识,如今分享一些本身的学习经验以及对某些知识点的认识。java

我以为对软件构造的学习应该从广到精,先了解软件构造的大致框架,软件构造的过程,而后再继续深刻了解各个实现细节。我以为软件构造最核心的基础知识即是ADT和OOP,接下来跟你们分享一下我对这些知识的了解。编程

抽象数据类型:ADT安全

抽象意味着什么:框架

抽象数据类型是软件工程中通常原理的一个实例,它有许多名称,其意义略有不一样:编程语言

抽象:用更简单,更高层次的概念来省略或隐藏底层细节。模块化

模块化:将系统划分为组件或模块,每一个组件能够与系统的其余部分分开设计,实施,测试,推理和重复使用。oop

封装:围绕模块构建墙壁(硬壳或胶囊),使模块对其自身的内部行为负责,而且系统其余部分的错误不会损害其完整性。学习

信息隐藏:从系统的其余部分隐藏模块实现的细节,以便稍后能够更改这些细节,而无需更改系统的其他部分。测试

用户定义类型:ui

在软件开发方面一个重大的进展就是抽象数据类型的提出。数据抽象的关键思想是:一个类型被能够对其进行的操做特征化。好比说,一个数字是你能够进行加法或者乘法运算的类型,一个字符串是你能够链接或者得到其子字符串的类型等等。从某种意义上说,用户能够在早期的编程语言中定义本身的类型,可是抽象类型的新颖性和不一样之处在于它对操做的关注,用户不须要担忧它的值是如何存储,只须要知道如何对这些值进行操做。

类型分类与操做:

不管是用户本身定义的仍是内置的类型,均可以被分为可变的和不可变的。可变类型的对象能够被改变,也就是说,他们提供的操做在执行时会致使在同一个对象上的其余操做给出不一样的结果。如Date是可变的,咱们能够调用setMonth改变一个对象,并使用getMonth观察变化。String是不可变的,由于他的操做建立了一个新的String对象而不是对现有的String对象进行改变。有时一种类型将以两种形式提供,一种是可变的一种是不可变的。如StringBuild就是String的一个可变版本。

抽象的类型的操做分类以下:

Creator:构造器,建立该类型的新对象。一个创造器能够将对象做为参数,但不是正在建立的类型的对象。

Producer:产生器,从该类型的旧对象产生一个新对象。例如String的concat方法就是一个生产者,他链接两个字符串,产生一个新的字符串。

Observer:观察器,获取抽象类型的对象并返回不一样类型的对象。例如List的size方法返回一个int。

Mutator:改变器,改变对象。例如List的add方法经过在List最后添加一个元素改变List

这部分基础知识我以为最方便的就是用户能够根据本身的须要自行设计实现一些操做,很是实用,这是oop(面向对象编程)的基础。

接下来介绍一下我对一些面向对象知识的认识与感悟:

面向对象编程:OOP

何为对象:

随处可见的一种事物就是对象,对象是事物存在的实体。人们思考这些对象都是由何种部分组成的,一般会将对象划分为动态部分和静态部分。静态部分,顾名思义,就是不能动的部分,这部分被称为“属性”,任何对象都会具有其自身属性。一我的具有的行为行动,就是动态部分。

何为类:

类就是同一类事物的统称,对象是类的实例。若是将现实世界中的一个事物抽象成对象,类就是这类对象的统称。类是构造对象时因此来的规范,具备相同特性和行为的一类事物就称为类,类的思想就是这么产生的。更为恰当地描述是:类是世间事物的抽象称呼,而对象则是这个事物相对应的实体,若是面临实际问题,一般须要实例化类对象来解决。

类是封装对象的属性和行为的载体,反过来讲具备相同属性和行为的一类实体被称为类。

在Java语言中,类中对象的行为是以方法的形式定义的,对象的属性是以成员变量的形式定义的,而类包括对象的属性和方法。

(1)同一类事物的统称;

(2)封装一类事物的属性和行为的载体

(3)对象是类的实例

(4)经过类来生成对象

对象和类是面向对象的基石,利用基础的ADT抽象出来类,进而实例化出来一些对象,进而来构造程序,面向对象根据类和对象的关系以及一些属性的性质有如下几大特色:

1.封装

概念:是指隐藏对象的属性和实现细节,仅对外提供公共访问方式。

好处:• 将变化隔离。• 便于使用。• 提升重用性。• 提升安全性。

封装原则:

• 将不须要对外提供的内容都隐藏起来。

• 把属性都隐藏,提供公共方法对其访问。

Java中能够经过对类的成员设置必定的访问权限,实现类中成员的信息隐藏。

private:类中限定为private的成员,只能被这个类自己访问。若是一个类的构造方法声明为private,则其它类不能生成该类的一个实例。

default:类中不加任何访问权限限定的成员属于缺省的(default)访问状态,能够被这个类自己和同一个包中的类所访问。

protected:类中限定为protected的成员,能够被这个类自己、它的子类(包括同一个包中以及不一样包中的子类)和同一个包中的全部其余的类访问。

public:类中限定为public的成员,能够被全部的类访问。

 2.继承

继承是一种联结类的层次模型,而且容许和鼓励类的重用,它提供了一种明确表述共性的方法。对象的一个新类能够从现有的类中派生,这个过程称为类继承。

新类继承了原始类的特性,新类称为原始类的派生类(子类),而原始类称为新类的基类(父类)。派生类能够从它的基类那里继承方法和实例变量,而且类能够修改或增长新的方法使之更适合特殊的须要。

子类能够直接访问父类中的非私有的属性和行为。经过 extends 关键字让类与类之间产生继承关系。以下:class SubDemoextends Demo{}

继承提升了代码的复用性。

继承的出现让类与类之间产生了关系,提供了多态的前提

可是子类没法继承父类final类型,父类权限为private的类型

Java只支持单继承,不支持多继承。一个类只能有一个父类,不能够有多个父类

3.多态

方法的重写、重载与动态链接构成多态性。Java只容许单继承,这样作虽然保证了继承关系的简单明了,可是功能上有很大的限制,因此,Java引入了多态性的概念。此外,抽象类和接口也是解决单继承规定限制的重要手段。同时,多态也是面向对象编程的精髓所在。

多态性:发送消息给某个对象,让该对象自行决定响应何种行为。

  经过将子类对象引用赋值给超类对象引用变量来实现动态方法调用。

  java 的这种机制遵循一个原则:当超类对象引用变量引用子类对象时,被引用对象的类型而不是引用变量的类型决定了调用谁的成员方法,可是这个被调用的方法必须是在超类中定义过的,也就是说被子类覆盖的方法。

  1. 若是a是类A的一个引用,那么,a能够指向类A的一个实例,或者说指向类A的一个子类。

  2. 若是a是接口A的一个引用,那么,a必须指向实现了接口A的一个类的实例。

  定义一个父类类型的引用指向一个子类的对象既可使用子类强大的功能,又能够抽取父类的共性。

  因此,父类类型的引用能够调用父类中定义的全部属性和方法,可是对于子类中定义而父类中没有的方法,它是迫不得已的;

  同时,父类中的一个方法只有在在父类中定义而在子类中没有重写的状况下,才能够被父类类型的引用调用;

对于父类中定义的方法,若是子类中重写了该方法,那么父类类型的引用将会调用子类中的这个方法,这就是动态链接。

相关文章

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值