学习软件构造课程的总结与心得

在高级语言程序设计的基础上,认识软件构造的质量标准与目标,学习软件构造的基本过程,从而具备面向质量目标的复杂软件构造方法与能力

  • 基于ADT和OOP的JAVA编程学习
    • Abstract Data Type (ADT)
    • Object-Oriented Programming (OOP)
    • 课程所使用的JAVA
  • 认识软件构造的质量标准与目标
    • 健壮性
    • 正确性
    • 可维护性
    • 复用性
  • 并发和分布式编程(Concurrent and Distributed Programmin)
    • 并发(Concurrency)
    • 线程安全(Thread Safety)
    • 锁与同步(Locks and Synchronization)
  • 一些心得体会

基于ADT和OOP的JAVA编程学习

Abstract Data Type (ADT)

抽象数据类型(Abstract Data Type,ADT)是指这样一种数据类型,它不再单纯是一组值的集合,还包括作用在值集上的操作的集合,即在构造数据类型的基础上增加了对数据的操作,且类型的表示细节及操作的实现细节对外是不可见得。之所以说它是抽象的,是因为外部只知道它做什么,而不知道它如何做,更不知道数据的内部表示细节。这样,即使改变数据的表示和操作的实现,也不会影响程序的其他部分。抽象数据类型可达到更好的信息隐藏效果,因为它使程序不依赖于数据结构的具体实现方法,只要提供相同的操作,换用其他方法实现时,程序无需修改,这个特征对于系统的维护很有利。C++中的类(Class)是抽象数据类型的一种具体实现,也是面向对象(Object-Oriented)程序设计语言中的一个重要概念。从结构体过渡到类是顺其自然的事情,但是不能将C++看成是带类的C,因为它带来的是思考和解决问题角度的转变。不同于面向过程的程序设计,在面向对象程序设计中,程序员面对的不再是一个个函数和变量,而是一个个对象。每个对象包含两个部分:数据和方法,数据用来保存对象的属性,而方法用来完成对数据的操作。对象与对象之间是通过消息进行通信的。

学习软件构造课程的总结与心得

课程所使用的JAVA

Java技术是一套完整的IT行业解决方案,其中包含了很多技术。最初是从解决家电设备联网通讯的方案发展起来的,其特点适用于Internet,于是在Internet广泛应用的环境下,迅速发展成为一种计算机语言、一个平台、一个网络计算的架构。

从整体上划分,Java技术可分成Java编程语言和Java平台。Java编程语言是一种高级编程语言,Java平台是指程序运行的硬件或软件环境。

  1. 跨平台性
      所谓的跨平台性,是指软件可以不受计算机硬件和操作系统的约束而在任意计算机环境下正常运行。这是软件发展的趋势和编程人员追求的目标。之所以这样说,是因为计算机硬件的种类繁多,操作系统也各不相同,不同的用户和公司有自己不同的计算机环境偏好,而软件为了能在这些不同的环境里正常运行,就需要独立于这些平台。
      而在Java语言中, Java自带的虚拟机很好地实现了跨平台性。 Java源程序代码经过编译后生成二进制的字节码是与平台无关的,但是可被Java虚拟机识别的一种机器码指令。 Java虚拟机提供了一个字节码到底层硬件平台及操作系统的屏障,使得Java语言具备跨平台性。

  2. 面向对象
      面向对象是指以对象为基本粒度,其下包含属性和方法。对象的说明用属性表达,而通过使用方法来操作这个对象。面向对象技术使得应用程序的开发变得简单易用,节省代码。Java是一种面向对象的语言,也继承了面向对象的诸多好处,如代码扩展、代码复用等。

  3. 安全性
      安全性可以分为四个层面,即语言级安全性、编译时安全性、运行时安全性、可执行代码安全性。语言级安全性指Java的数据结构是完整的对象,这些封装过的数据类型具有安全性。编译时要进行Java语言和语义的检查,保证每个变量对应一个相应的值,编译后生成Java类。运行时Java类需要类加载器载入www jxzxmr net,并经由字节码校验器校验之后才可以运行。 Java类在网络上使用时,对它的权限进行了设置,保证了被访问用户的安全性。

  4. 多线程
      多线程在操作系统中已得到了最成功的应用。多线程是指允许一个应用程序同时存在两个或两个以上的线程,用于支持事务并发和多任务处理。 Java除了内置的多线程技术之外,还定义了一些类、方法等来建立和管理用户定义的多线程。

  5. 简单易用
      Java源代码的书写不拘泥于特定的环境,可以用记事本、文本编辑器等编辑软件来实现,然后将源文件进行编译,编译通过后可直接运行,通过调试则可得到想要的结果。

    学习软件构造课程的总结与心得

    可维护性

    软件可维护性即维护人员对该软件进行维护的难易程度,具体包括理解、改正、改动和改进该软件的难易程度。

    决定可维护性的因素:

    1. 系统的大小
    2. 系统的年龄
    3. 结构合理性

    如何提高软件的可维护性:

    1. 模块化是软件开发过程中提高软件质量,提高开发效率,同时,提高可维护性德有效方法之一,它的优点是如果需要改变某个模块的功能,则只要改变这个模块,对其它模块影响很小;如果需要增加程序的某些功能,则仅需增加完成这些功能的新的模块或模块层;程序的测试与重复测试比较容易;程序错误易于定位和纠正;容易提高程序效率。
    2. 建立高内聚,低耦合模块。 使用结构化程序设计技术,提高现有系统的可维护性。
    3. 改进现有程序的不完善的文档,改进和补充文档的目的是为了提高程序的可理解性,以提高可维护性。采用结构化小组程序设计的思想和结构文档工具。软件开发过程中。建立主程序员小组,实现严格的组织化结构,强调规范,明确领导以及职能分工,能够改善通信、提高程序生产率;在检查程序质量时,采取有组织分工的结构普查,分工合作,各司其职,能够有效地实施质量检查。
      学习软件构造课程的总结与心得

      并发和分布式编程(Concurrent and Distributed Programmin)

      并发(Concurrency)

      并发的概念:
      同时拥有两个或多个线程,如果程序在单核处理器上运行,多个线程将交替地换入或者换出内存,这些线程是同时「 存在 」的,每个线程都处于执行过程中的某个状态,如果运行在多核处理器上,此时,程序中每个线程都将分配到一个处理器核上,因此可以同时运行。也就是说,并发就是多个线程操作相同的物理机中的资源,保证其线程安全,合理的利用资源。

      用更为通俗的语言解释:
      并行是指两个或者多个事件在同一时刻发生;而并发是指两个或多个事件在同一时间间隔发生。
      并行是在不同实体上的多个事件,并发是在同一实体上的多个事件。
      并发是一次处理很多事情,并行是同时做很多事情。
      总之:并行是两个线程(或进程)同时执行,并发指一会做这件事情,一会做这件事情,一会做那件之情,他们有个调度的过程。
      所以并发编程的目标是充分的利用处理器的每一个核,以达到最高的处理性能。并行只有在多核下才会有。

      学习软件构造课程的总结与心得

      锁与同步(Locks and Synchronization)

      加锁机制

      • 在线程安全的定义中,多个线程间的操作无论采用何种执行时序或交替方式,都要保证不变性条件不被破坏。当不变性条件中涉及多个变量时,各个变量之间并不是互相独立的,一个变量发生变化会对其他变量的值产生约束。因此,一个变量发生改变,在同一个原子操作里面,其他相关变量也要更新。

      • 内置锁:同步代码块(SynchronizedBlock)包括两部分:一个作为锁的对象引用,一个作为由这个锁保护的代码块。关键字Synchronized修饰方法就是一种同步代码块,锁就是方法调用所在的对象,静态的Synchronized方法以Class对象作为锁。内置锁或监视锁就是以对象作为实现同步的锁。Java内置锁,进入的唯一途径是执行进入由锁保护的同步代码块或方法。它相当于一种互斥锁。

      • 重入锁:当一个持有锁的线程再次请求进入自己持有的锁时,该请求会成功。”重入”意味着获取锁的操作的粒度是“线程”,而不是“调用”。重入的一种实现方式,为每个锁关联一个计数器和线程持有者。

      锁与同步的区别:

      1)Lock是一个接口,而synchronized是Java中的关键字,synchronized是内置的语言实现,synchronized是在JVM层面上实现的,不但可以通过一些监控工具监控synchronized的锁定,而且在代码执行时出现异常,JVM会自动释放锁定,但是使用Lock则不行,lock是通过代码实现的,要保证锁定一定会被释放,就必须将 unLock()放到finally{} 中;
      2)synchronized在发生异常时,会自动释放线程占有的锁,因此不会导致死锁现象发生;而Lock在发生异常时,如果没有主动通过unLock()去释放锁,则很可能造成死锁现象,因此使用Lock时需要在finally块中释放锁;

      3)Lock可以让等待锁的线程响应中断,线程可以中断去干别的事务,而synchronized却不行,使用synchronized时,等待的线程会一直等待下去,不能够响应中断;

      4)通过Lock可以知道有没有成功获取锁,而synchronized却无法办到。

      5)Lock可以提高多个线程进行读操作的效率。

      在性能上来说,如果竞争资源不激烈,两者的性能是差不多的,而当竞争资源非常激烈时(即有大量线程同时竞争),此时Lock的性能要远远优于synchronized。所以说,在具体使用时要根据适当情况选择。
        

      学习软件构造课程的总结与心得

      一些心得体会

      任谁来看,这一门开设仅仅第二年的课程都是充满难度与挑战性的,既要不断地磨练java编程能力,也要学着如何去努力从零开始构造一个小程序,更要一步步的完善它,提高健壮性和可靠性。但在一次又一次的失败与常识中,得到的也是最多的,我们开始理解什么是程序员应该做的,不仅仅是写出代码就好了,更重要的是如何避免自己的代码漏洞百出,不堪一用。
      对于6个lab,代码量一个都不少,思考量更是惊人,但是回过头来,都有其价值所在。lab1让我们上手java,开始学习着使用IDE。lab2让我们正式深入了解ADT这一陌生又熟悉,在编程中表演着重要角色的概念。lab3是重中之重,是后面两个实验的基石,也是代码量最最巨大的一个实验。lab4和lab5是延申,是对于新的内容的添加和运用。lab6是关于并发的最好理解,让我们能够在实践中学习和加深印象。
      总之,尽管实验内容繁多,课程复杂,这个课程的意义重大,让人受益匪浅。

      来源:weixin_43446675

      声明:本站部分文章及图片转载于互联网,内容版权归原作者所有,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2019年5月21日
下一篇 2019年5月21日

相关推荐