当前位置:网站首页>软件构造课程ADT与OOP理解
软件构造课程ADT与OOP理解
2022-06-22 21:19:00 【小王不累】
经过一学期对软件构造的学习,学到了不少知识,对软件构造过程及其各个细节都有了不少的认识,现在分享一些自己的学习经验以及对某些知识点的认识。
我觉得对软件构造的学习应该从广到精,先了解软件构造的大体框架,软件构造的过程,然后再继续深入了解各个实现细节。我觉得软件构造最核心的基础知识便是ADT和OOP,接下来跟大家分享一下我对这些知识的了解。
抽象数据类型:ADT
抽象意味着什么:
抽象数据类型是软件工程中一般原理的一个实例,它有许多名称,其意义略有不同:
抽象:用更简单,更高层次的概念来省略或隐藏底层细节。
模块化:将系统划分为组件或模块,每个组件可以与系统的其他部分分开设计,实施,测试,推理和重复使用。
封装:围绕模块构建墙壁(硬壳或胶囊),使模块对其自身的内部行为负责,并且系统其他部分的错误不会损害其完整性。
信息隐藏:从系统的其他部分隐藏模块实现的细节,以便稍后可以更改这些细节,而无需更改系统的其余部分。
用户定义类型:
在软件开发方面一个重大的进展就是抽象数据类型的提出。数据抽象的关键思想是:一个类型被可以对其进行的操作特征化。比如说,一个数字是你可以进行加法或者乘法运算的类型,一个字符串是你可以连接或者获得其子字符串的类型等等。从某种意义上说,用户可以在早期的编程语言中定义自己的类型,但是抽象类型的新颖性和不同之处在于它对操作的关注,用户不需要担心它的值是如何存储,只需要知道如何对这些值进行操作。
类型分类与操作:
无论是用户自己定义的还是内置的类型,都可以被分为可变的和不可变的。可变类型的对象可以被改变,也就是说,他们提供的操作在执行时会导致在同一个对象上的其他操作给出不同的结果。如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的一个类的实例。
定义一个父类类型的引用指向一个子类的对象既可以使用子类强大的功能,又可以抽取父类的共性。
所以,父类类型的引用可以调用父类中定义的所有属性和方法,但是对于子类中定义而父类中没有的方法,它是无可奈何的;
同时,父类中的一个方法只有在在父类中定义而在子类中没有重写的情况下,才可以被父类类型的引用调用;
对于父类中定义的方法,如果子类中重写了该方法,那么父类类型的引用将会调用子类中的这个方法,这就是动态连接。
边栏推荐
猜你喜欢

xml转义字符对照表

【ARM】讯为rk3568开发板lvds屏设置横屏显示
Learn redis with you (11) -- redis distributed lock

Smart data won two annual awards at the second isig China Industrial Intelligence Conference

在Word中自定义多级列表样式

flutter外包,承接flutter项目

Learning the interpretable representation of quantum entanglement, the depth generation model can be directly applied to other physical systems

three.js模拟驾驶游览艺术展厅---打造超级相机控制器

Optimization - linear programming

Future alternatives to IPv4! Read the advantages, features and address types of IPv6
随机推荐
OJ每日一练——过滤多余的空格
OJ每日一练——验证子串
【ARM】讯为rk3568开发板lvds屏设置横屏显示
PHP7.3报错undefined function simplexml_load_string()
OJ daily practice - Verifying substring
os. When the command line parameter in args[1:] is empty, the internal statement will not be executed
Spark SQL Start(2.4.3)
Dip1000,1 of D
Unity:利用 射线Ray 检测物体
SSH method 2 for adding node nodes in Jenkins
OJ daily exercise - virus proliferation
js----SVG转PNG
剑指 Offer 06. 从尾到头打印链表
Eslint simple configuration
保证数据库和缓存的一致性
为 localStorage 添加过期时间
DCC888 :SSA (static single assignment form)
China Mobile's mobile phone users grow slowly, but strive for high profit 5g package users
使用Redisson操作分布式队列的注意事项
在Word中自定义多级列表样式