Golang的面向对象编程

          Golang的面向对象编程

                               作者:尹正杰

版权声明:原创作品,谢绝转载!否则将追究法律责任。

 

 

  Go语言的面向对象之所以与C++,Java以及(较小程度上的)Python这些语言不同,是因为它不支持继承,仅支持聚合(也叫组合)和嵌入。接下来我们一起来学习一下Go语言的面向对象编程吧。

 

一.面向对象编程思想

  面向对象编程刚流行的时候,继承是它首先被吹捧的最大优点之一。但是历经几十载的实践之后,事实证明该特性也有些明显的缺点,特别是当用于维护大系统时。Go语言建议的是面向接口编程。

  常见的编程方式:
    面向过程(面向函数式编程):
      典型代表:
        C语言
      优点:
        流程清晰,代码易读。
      缺点:
        耦合度太高,不利于项目迭代。

    面向对象编程:
      典型代表:
        C++,Java,Python,Golang等。
      优点:
        解耦。
      缺点:
        代码抽象度过高,不易读。

  面向对象三要素:
    封装
      组装:将数据和操作组装到一起。
      隐藏数据:对外只暴露一些接口,通过接口访问对象。比如驾驶员使用汽车,不需要了解汽车的构造细节,只需要知道使用什么部件怎么驾驶就行,踩了油门就能跑,可以不了解其中的机动原理。
    继承
      多复用,继承来的就不用自己写了。
      多继承少修改,OCP(Open-closed Principle),使用继承来改变,来体现个性。
    多态
      面向对象编程最灵活的地方,动态绑定。
 
  与其它大部分使用聚合和继承的面向对象语言不同的是,Go语言只支持聚合(也叫做组合)和嵌入。

二.结构体的定义及初始化

 

package main

import (
    "fmt"
)

type Person struct {
    Name   string
    Age    int
    Gender string
}

type Student struct {
    Person //通过匿名组合的方式嵌入了Person的属性。
    Score  float64
}

type Teacher struct {
    Person //通过匿名组合的方式嵌入了Person的属性。
    Course string
}

type Schoolmaster struct {
    Person   //通过匿名组合的方式嵌入了Person的属性。
    CarBrand string
}

func main() {
    /**
    第一种初始化方式:先定义后赋值
    */
    s1 := Student{}
    s1.Name = "Jason Yin"
    fmt.Println(s1)
    fmt.Printf("%+v\n\n", s1) //"+v表示打印结构体的各个字段"

    /**
    第二种初始化方式:直接初始化
    */
    s2 := Teacher{Person{"尹正杰", 18, "boy"}, "Go并发编程"}
    fmt.Println(s2)
    fmt.Printf("%+v\n\n", s2)

    /**
    第三种赋值方式:初始化赋值部分字段
    */
    s3 := Schoolmaster{CarBrand: "丰田", Person: Person{Name: "JasonYin最强王者"}}
    fmt.Println(s3)
    fmt.Printf("%+v\n", s3)
}

 

 

 

三.面向接口编程

 

猜你喜欢

转载自www.cnblogs.com/yinzhengjie2020/p/12536401.html