AI智能
改变未来

Go语言实训笔记(三)

一、面向对象意义:1)面向对象的对立面是面向过程:① 面向过程是以函数为核心.② 如果要开展大型工程,就需要管理更多的函数.③ 面向过程的语言不适合开展大型项目.2)面向对象的好处:① 面向对象是以类/结构体为核心的.② 类/结构体是对函数的二次封装③ 相对于管理海量的函数,你只需要管理少量的类/结构体.④ 面向对象使大型工程的开发变得简单.特性:1 封装:将业务相近的变量,函数封装为结构体(相当于java中的类),化繁为简,减少直接管理的成员数.① 封装结构体的方法:无论方法的主语定义为值类型还是指针类型,对象值和对象指针都能正常访问.通常会将主语定义为指针类型.② 创建对象实例,可以通过对象的指针去访问对象的属性和方法.③ 创建对象时可以按照属性定义的顺序为属性赋值,但赋值的顺序必须和定义属性的顺序完全一致.④ 值传递和指针传递的区别:值传递传递的是副本,引用(指针)传递的才是真身.1)方法要求用值传递就必须是值传递.2)方法要求指针传递就必须是指针传递.2 继承: 将公共的部分提取到父类,减少代码的重复,降低代码的冗余.① 子类默认拥有父类的全部属性和方法② 继承的目的是为了发展,增加新的属性和方法,修改父类方法.③ 只要持有父类的声明,就继承了父类.3 多态:一个父/接口类有多种不同的具体子类的实现.① 共性:通过调用父类方法去调度子类实列.② 个性:不同子类对父类方法的具体实现各不相同.4 抽象:父类接口只定义方法,不做具体实现.① 抽象方法:对方法只定义不实现.② 接口:接口中的方法全部都是抽象方法,在接口中不做具体实现.③ 结构体实现接口中的全部抽象方法,就称该结构体实现了接口.接口的继承:java语言中实现接口必须要实现接口中的所有方法,而go语言中是软实现,若果没有完全实现接口中的所有方法,那么该实列的子类对象.① 显示继承,直接在子类中对接口进行声明,直接调用接口的方法.② 隐式继承,没有直接对接口进行声明,但是实现了接口中的方法.二. 类型断言(类型判断)的方法类型断言的作用是在多态中找出具体的对象.1 大面积类型判断,判断接口实例的具体方法 switch xxx (type){case * Worker}....用switch判断方式进行判断,大面积的判断.2 重点类型判断,对具体的对象进行判断. if coder,ok = xxx.(*Coder);ok{ 函数体}else{函数体}用if语句进行判断,判断转化是否成功,如果成功,返回,如果不成功else,将父类降级为子类,调用子类特有的方法.类型断言的注意事项:① 创建子类时,具体用什么类/结构体,就只能断言为什么类/结构体.②  不能因为继承层级比较多,就随意地断言为其中的任意一种父类.3 面向对象重难点分析:① func(p *Person)Eat(){...}这样方法,使用指针和值都可以调用,建议是尽量用指针,能最大程度地避免对p的修改不影响到Person的真身;② 定义方法是,方法的主语最好用指针,最大程度的减小值传递的拷贝效应的负面影响.③ 对象做陈参数时,值传递是拷贝式的;指针传递(地址/引用传递传的才是真正的值.④ 在oop中,值能做的事情指针都能做,而指针能做的事情值不是所有都能做.⑤ 做主语时,使用值或指针的效果一致,但做参数的时候,一个是拷贝式值传递(不会影响本身),一个是引用传递(会直接影响本身,修改地址值).创建对象的方法:① 创建空白对象: p:=Person{}② 创建对象时,有选择地给指定属性赋值:p:=Person{age:20,name:\"张三\"}③ 创建对象时,完整有序地给所有属性赋值:p:=Person{\"张三\",20,true,[]String{\"撸代码\",\"完美的撸代码\"}//撸代码是爱好}④ 通过内建函数创建对象指针:pPtr:=new(Person) new(Type)*Type用于创建结构体的实列指针,new的参数是结构体的名字,返回的是所有属性都为默认值的对象指针.⑤ 命名尽量要能够望文生义,例如:personPtr,它是一个对象指针,而非实例.
赞(0) 打赏
未经允许不得转载:爱站程序员基地 » Go语言实训笔记(三)