• 20182301 2019-2020-1 《数据结构与面向对象程序设计》第4周学习总结


    20182301 2019-2020-1 《数据结构与面向对象程序设计》第4周学习总结

    教材学习内容总结

    • 面向对象程序设计的核心是类的定义,它代表定义了状态和行为的对象
      • toString方法在将对象传递给print和println方法,以及将一个对象与一个字符串连接时,会自动调用对象的toString方法
    public String toString()
    {
        String result = Integer.toString(faceValue);
        return result;
    }
    
    • 变量的作用域依赖变量声明的位置,作用域决定在哪里可以使用变量
    • 封装
      • 不允许对象的代码直接访问变量,只能调用
      • 可见性修饰符控制类中成员的访问权限。public,private和protected
      • 访问方法:getX;设置方法:setX;客户可以通过它管理数据
    • return
      • 方法头部指定的返回值类型可以是:基本类型、类名、保留字void
      • 方法的返回类型应该与方法头中规定的返回值类型一样
      • 方法应该只有一条return语句作为方法体的最后一行
    • 参数
      • 当调用方法时,将实参复制给形参
      • 方法中,形参和实参互为别名
    • 构造方法
      • 构造方法不能有任何的返回值,即使是void也不行
      • 用来初始化新创建的对象
    • 静态变量
      • eg:private static int count = 0;
      • 静态变量由类中的所有实例所共享
      • 方法内声明的局部变量不能是静态的
    • 静态方法
      • eg:Math类的所用方法都是静态方法
      • public static void main(String[] args)运用static,所以,main可以由解释程序运行,而不需要实例化。
      • 静态方法不会对具体的对象进行操作
      • 静态方法只能访问静态变量或局部变量
    • 聚合
      • 聚合对象由其他对象组成,形成has-a关系
      • 聚合是一类特殊的依赖关系
    • this引用
      • eg:if(this.positise==pieces.positise) result = fault;
      • this引用用来指明某个位置
      • 常用来区分构造方法中参数与对应的同名实例变量(见书p128)
    • 方法重载:让多个方法使用相同的方法名但有不同的参数列表
      • 当调用方法时,控制流将转用定义方法的代码
      • 重载方法的各个版本由参数个数、类型及次序来区分
      • eg:参数的类型、个数等不同
    • 测试
      • 审核:用来评价设计或代码的一项技术
      • 缺陷测试:可以发现错误,进行黑盒测试
      • 单元测试:每个测试创建一个测试用例
      • 集成测试:作为一个整体进行测试
      • 系统测试:观察需求
      • 测试驱动开发:先写测试用例,再进行源代码

    教材学习中的问题和解决过程

    • 问题1:抽象类与接口有什么区别
    • 问题1解决方案:抽象方法不用具体书写。要不就抽象,要不就实例化
      • 抽象类中可以存在非抽象的方法 ; 接口中的方法被默认的变成抽象方法,只要是定义了接口,接口中的方法就全部变成了抽象类即使你不写abstract 它也是抽象的方法
      • 接口是抽象类的一种, 也可以说接口是抽象类的延伸
      • 抽象类可以有私有的成员变量和成员方法 ; 接口中的方法全都被默认的修饰为: public abstract 类型的方法
      • 一个类只能继承一个抽象类 一个类可以实现多个接口 ,接口可以实现多继承 举例:interface display extends aa ,bb,cc ...等等 ,然后让类去实现 display的接口 就可以实现 display aa bb cc接口
      • 抽象类中的非抽象的方法可以选择继承 ; 接口中的方法必须全部被重写 ,并且全部是公有的public 方法.
    • 问题2:新建变量有几种方法
    • 问题2解决方案:
      • 关键字 new。工厂模式是对这种方式的包装;
      • 类实现克隆接口,克隆一个实例。原型模式是一个应用实例;
      • 用该类的加载器,newinstance。java的反射,反射使用实例:Spring的依赖注入、切面编程中动态代理
      • sun.misc.Unsafe类,allocateInstance方法创建一个实例。(Java官方也不建议直接使用的Unsafe类,据说Oracle正在计划从Java9中去掉Unsafe类)
      • 实现序列化接口的类,通过IO流反序列化读取一个类,获得实例。
      • 如果是静态变量就直接用
    • 问题3:局部数据和实例数据有什么区别?
    • 问题3解决方案:(如图:)

    • 问题4:什么叫做交互?
    • 问题4解决方案:
      • 构造函数传递
      • 通过getX和setX方法
      • 接口

    代码调试中的问题和解决过程

    • 问题1:Coin中(如下),为什么要有这个,既然有为什么不把isHead写进去?

    • 问题1解决方案:flip方法,将硬币设为初始的随机状态;
    • 问题2:Account中的free,为什么要使用?

    • 问题2解决方案:我初步认为这应该是信用额度,可提前支出

    代码托管

    上周考试错题总结

    • In order to preserve encapsulation(封装) of an object, we would do all of the following except for which one?
      • A .Make the instance data private
      • B .Define the methods in the class to access and manipulate the instance data(定义类中的方法来访问和操作实例数据)
      • C .Make the methods of the class public
      • D .Make the class final
      • E .All of the above preserve encapsulation
      • 正确:D
      • 原因:封装意味着类包含操作数据所需的数据和方法。为了正确地保留封装,实例数据不应该直接从类外部访问,因此实例数据被设为私有,并定义方法来访问和操作实例数据。此外,访问和操作实例数据的方法被公开,以便其他类可以使用该对象。保留字“最终”用于控制继承,与封装无关。
    • Consider a sequence of method invocations as follows: main calls m1, m1 calls m2, m2 calls m3 and then m2 calls m4, m3 calls m5. If m4 has just terminated, what method will resume execution?(考虑以下方法调用序列:主调用m1, m1调用m2, m2调用m3,然后m2调用m4, m3调用m5。如果m4刚刚终止,什么方法将恢复执行)
      • m2
    • A variable whose scope is restricted to the method where it was declared is known as a(n)(一个变量的作用域被限制在它声明的方法中,称为A (n))
      • A .parameter(参数,系数)
      • B .global variable(全局变量)
      • C .local variable(局部变量)
      • D .public instance data(公共实例数据)
      • E .private instance data(私人实例数据)
      • 正确:C
    • A class' constructor usually defines
      • A .how an object is initialized
      • B .how an object is interfaced
      • C .the number of instance data in the class
      • D .the number of methods in the class
      • E .if the instance data are accessible outside of the object directly
      • 正确:A
      • 原因:构造函数应该用于“构造”对象,即设置实例数据的初始值。这不是必需的,但通常是这样做的。对象的接口由实例数据和方法上使用的可见性修饰符决定。
    • The following method header definition will result in a syntax error: public void aMethod( );
      • 正确:true
      • 原因:语法错误的原因是它以“;”符号结束。相反,它需要在{}后面加上括号内的0或更多的指令。抽象方法将以“;”结束,但是这个头没有定义抽象方法。
    • While multiple objects of the same class can exist, in a given program there can be only one version of each class
      • 正确:true
      • 原因:类是一个抽象,也就是说,它作为一个定义而存在,而不是作为一个物理实例而存在。使用new实例化对象时创建物理实例。因此,可以有许多String类型的对象,但只有一个String类。
    • An object should be encapsulated in order to guard its data and methods from inappropriate access.
      • 正确:true
      • 原因:封装是这样一个概念:应该保护对象不受意外(或有目的)的误用。
    • Accessors and mutators provide mechanisms for controlled access to a well-encapsulated class.
      • 正确 :true
      • 原因:访问器提供对变量的读访问,否则这些变量是不可访问的。mutator提供对以其他方式不可访问的变量的写访问
    • Java does not support multiple inheritance, but some of the abilities of multiple inheritance are available by
      • 正确:
      • A .importing classes
      • B .implementing interfaces
      • C .overriding parent class methods
      • D .creating aliases
      • E .using public rather than protected or private modifiers
      • 正确:B
      • 原因:因为一个类可以实现任意数量的接口,所以这个类本质上使用接口类,就好像这些接口是在这个类中定义的一样。这个类继承了接口的方法和常量。此外,该类可以扩展另一个类,从而直接或间接地继承多个类。这与多重继承并不完全相同,但它与Java的概念非常接近
    • In order to determine the type that a polymorphic variable refers to, the decision is made
      • A .by the programmer at the time the program is written
      • B .by the compiler at compile time
      • C .by the operating system when the program is loaded into memory
      • D .by the Java run-time environment at run time
      • E .by the user at run time
      • 正确:D
      • 原因:多态变量可以具有许多不同的类型,但是在程序执行之前,它不知道自己具有哪种类型。在引用变量时,必须做出决策。这个决定是由运行时环境做出的
    • Which of these is correct?
      • A .a base class is a parent class or super class
      • B .a base class is a child class or derived class
      • C .a child class is a super class of its parent
      • D .a parent class is a subclass of its child
      • E .none of the above
      • 正确:A
      • 原因:术语、基类、父类、超类是彼此的同义词。它们都暗示类将被用作继承的基础,并且后续的类将扩展(继承)基类
    • Why shouldn't an abstract method be declared final?
      • A .There's nothing wrong with doing so
      • B .Abstract methods cannot be overridden and they must be if a concrete class ever is to be instantiated
      • C .So long as the Abstract method never actually is used in by any other method, there's no problem with doing this
      • D .So long as the Abstract method is declared in a Class (not an Interface), there's nothing wrong with doing this
      • E .None of the above
      • 正确:B
      • 原因:为了使抽象方法变得具体,必须覆盖它。将一个方法声明为final使得不可能覆盖它。这是矛盾的,是禁止的
    • Interface classes cannot be extended but classes that implement interfaces can be extended.
      • 正确:True
      • 原因:任何类都可以扩展,不管它是接口、实现接口还是两者都不可以。唯一的例外是类被“final”显式修改,在这种情况下不能扩展。
    • You may use the super reserved word to access a parent class'private members.
      • false
      • 原因:Super将允许访问父类的所有非私有成员,但不允许访问私有成员。
    • Although classes can be inherited from one-another, even Abstract classes, interfaces cannot be inherited.
      • false
      • 接口具有普通类所具有的所有继承属性。因此,您可以创建接口继承层次结构,就像您可以创建类继承层次结构一样。但是,您不能实例化必须实现的接口。

    结对及互评

    • 博客中值得学习的或问题:

      • 类和包究竟有什么关系?public类具体是修饰什么的,为什么当其存在时文件名与其所修饰的类要相同?(2330)
      • 枚举类型好像挺鸡肋的,到底有啥用?(2311)
    • 代码中值得学习的或问题:

      • Math里面的随机数方法是random不是Random,注意区分大小写。
      • 在输入字符时,使用nextChar方法(2303)
    • 基于评分标准,我给本博客打分:14分。得分情况如下:

      • 正确使用Markdown语法 1分
      • 模板中的要素齐全 1分
      • 教材学习中的问题和解决过程 4分
      • 代码调试中的问题和解决过程 2分
      • 感想,体会不假大空 1分
      • 排版精美的 1分
      • 进度条中记录学习时间与改进情况 1分
      • 点评认真,能指出博客和代码中的问题 1分
      • 错题学习深入 1分
      • 结对学习情况真实可信 1分

    点评过的同学博客和代码

    • 本周结对学习情况

    - 结对学习内容
        - idea插件运用
        - 码云链接上传
    

    其他(感悟、思考等,可选)

    现在的学习难度逐渐加大,我认为我需要去自己学习,自己感悟,自己理解,不断进步。

    学习进度条

    代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
    目标 5000行 30篇 400小时
    第一周 69/69 2/2 30/30
    第二、三周 529/598 3/5 25/55
    第四周 443/1041 2/7 25/80

    尝试一下记录「计划学习时间」和「实际学习时间」,到期末看看能不能改进自己的计划能力。这个工作学习中很重要,也很有用。
    耗时估计的公式:Y=X+X/N ,Y=X-X/N,训练次数多了,X、Y就接近了。

    参考:软件工程软件的估计为什么这么难软件工程 估计方法

    • 计划学习时间:25小时

    • 实际学习时间:25小时

    • 改进情况:
      这周逐渐摸清套路,缓慢进步。

    参考资料

  • 相关阅读:
    在Swift中定义属于自己的运算符
    计算型属性 vs 懒加载
    swift- mutating
    什么是CGI、FastCGI、PHP-CGI、PHP-FPM、Spawn-FCGI?
    微信授权登录-微信公众号和PC端网站
    PHP实现购物车的思路和源码分析
    PHP实现图片的等比缩放和Logo水印功能示例
    PHP实现IP访问限制及提交次数的方法详解
    Laravel 队列发送邮件
    laravel 定时任务通过队列发送邮件
  • 原文地址:https://www.cnblogs.com/zhaopeining/p/11614558.html
Copyright © 2020-2023  润新知