Skip to content

Latest commit

 

History

History
132 lines (87 loc) · 3.84 KB

6面向对象编程.md

File metadata and controls

132 lines (87 loc) · 3.84 KB

面向对象编程应用

步骤:

  • 1.声明(定义)结构体,确定结构体名
  • 2.编写结构体的字段 -3.编写结构体的方法

alter KEYSPACE system_auth WITH replication = {'class': 'SimpleStrategy', 'replication_factor': '3'} AND durable_writes = true;

CREATE KEYSPACE eo_chatmsg WITH replication = {'class': 'NetworkTopologyStrategy','datacenter1': '3'} AND durable_writes = true;

2、工厂模式

golang 的结构体没有构造函数,通常使用工厂模式解决这个问题。

3、抽象(编程的思维方式)

定义一个结构体的时候,实际上就是把一类事物的共有的属性(字段)和行为(方法)提取出来,形成一个物理模板(结构体)。这种研究问题的方法成为抽象。

4、oop的三大特性

封装:把抽象出来的字段和对字段的操作封装在一起,数据被保护在内部,程序的其他包只有通过被授权的操作(方法),才能对字段操作。

封装体现:对结构体中的属性进行封装;通过方法、包实现封装

继承:extends,利用匿名结构体实现继承特性。

嵌套匿名结构体的基本语法: ``` tyep Goods struct{ Name string Price float64 }

type Book struct{

	Goods //嵌套匿名结构体Goods
	Writer string
}

//访问 book :=Booke{} book.Goods.Name= "" //简化:book.Name = "", book会(就近原则)先去Book结构体中找Name,如果不存在则去Goods结构体去找。 ```

如果一个struct 嵌套一个有名结构体,这个模式就是组合,如果是组合关系,那么在访问组合的结构体的字段或方法时,必须带上结构体的名字。

type A struct{
	Name string
}

type B struct{
	a A
}

var b  B
b.a.name = ""

匿名字段


//匿名字段的使用

type NM struct{
	Goods
	int   //匿名字段  int类型的匿名字段不能重复出现,只能出现一次int类型的匿名子弹
}

var nm NM
nm.int = 110  //匿名字段,可以直接使用使用字段类型  ; 

fmt.Println(nm.int)

接口:

接口语法:

type 接口名 interface{
	method1(参数列表) 返回类型列表
	method2(参数列表) 返回类型列表
	....
}

实现结构所有方法:

func(t 自定义类型) medol1(参数列表) 返回值列表{
	//方法实现
}

func(t 自定义类型) medol2(参数列表) 返回值列表{
	//方法实现
}

使用细节:

  • 1.interface不能包含任何变量;
  • 2.interface里所有方法都没有方法体
  • 3.接口本身不能创建实例,但是可以指向一个实现了该接口的自定义类型的变量(实例)
  • 4.一个自定义类型只有实现了某个接口,才能将该自定义的实例(变量)赋值给接口类型
  • 5.只要是自定义数据类型,就可以实现接口,不仅是结构体类型。
  • 6.一个自定义类型可以实现多个接口
  • 7.一个接口(A接口)可以继承多个别的接口(比如B、C接口),这时如果要实现A接口,也必须将B、C接口的方法全部实现。
  • 8.interface类型默认是一个指针,引用类型。如果没有对interface初始化就使用,那么会输出nil
  • 9.空接口interface{}没有任何方法,所以所有类型都实现了空接口(即可以把任何一个变量赋值给空接口)

接口的价值:

  • 1.解决代码的复用性和可维护性
  • 2.设计,设计好规范(方法),让其他自定义类型去实现这些方法。

接口比继承灵活,继承是满足 is-a的关系,而接口是满足like-a的关系

多态:

变量(实例)具有多种形态。go语言中,多态特性是通过接口实现的。可以按照统一的接口调用不同的实现,这时接口变量就呈现不同形态。

多态参数:

多态数组:

5、类型 断言 assert

类型断言,由于接口是一般类型,不知道具体类型,如果要转成具体类型,就需要使用类型断言。