zoukankan      html  css  js  c++  java
  • golang如何体现面向对象思想

    Golang没有类(class),Go语言的结构体(struct)和其它编程语言的类(class)有同等的地位,你可以理解Golang是基于struct来实现OOP特性的。

    Golang仍然有面向对象编程的继承,封装和多态的特性,只是实现的方式和其它OOP语言不一样,比如继承:Golang没有extends关键字,继承是通过匿名字段来实现的。

    Golang面向对象编程非常简洁,去掉了传统OOP语言的继承、方法重载、构造函数和析构函数、隐藏的this指针等等。

    Golang仅支持聚合和嵌入,提倡面向接口编程。

    Golang的封装通过struct(结构体)实现,继承通过匿名字段实现,多态通过interface(接口)实现

    封装

    在Java里面,我们使用public,private,protected关键字来作为变量或者函数的权限设置,但在Go语言中,GO语言只有大小写的区别,如果想把函数或者变量暴露在外部,那么就首字母大写,相反则小写。

    继承(匿名字段+匿名函数)

    匿名字段实现了成员变量的继承。

    type Person struct {
        Name string
        Age int
        Gender string
    } 
    
    type Student struct {
        Person //通过匿名组合方式嵌入了Person属性
        Score float64
    }

     在函数声明时,在其名字之前放上一个变量,即是一个方法。这个附加的参数会将该函数附加到这种类型上,即相当于为这种类型定义了一个独占的方法。

    package main
    
    import "math"
    import "fmt"
    
    type Point struct {
        x float64
        y float64
    }
    
    func TraDistance(p1 Point, p2 Point) float64 {
        return math.Hypot(p1.x-p2.x, p1.y-p2.y)
    }
    func (p1 Point) ObjDistance(p2 Point) float64 {
        return math.Hypot(p1.x-p2.x, p1.y-p2.y)
    }
    func main() {
        p1 := Point{10, 20}
        p2 := Point{20, 10}
        old_len := TraDistance(p1, p2)
        new_len := p1.ObjDistance(p2)
        fmt.Println("The result of old method is ", old_len)
        fmt.Println("The result of OBJ method is ", new_len)
    }

    多态(interface)

    特点

    1. interface 是⽅法声明的集合

    2. 任何类型的对象实现了在interface 接⼝中声明的全部⽅法, 则表明该类型实现了该接⼝。

    3. interface 可以作为⼀种数据类型, 实现了该接⼝的任何对象都可以给对应的接⼝类型变量赋值

    注意

    a. interface 可以被任意对象实现,⼀个类型/对象也可以实现多个 interface  

    b. ⽅法不能重载,如 eat(), eat(s string) 不能同时存在

    interface⼀定要和多态的特性结合

    多态的三要素

    1 有⼀个⽗类的接⼝(抽象)

    2 有⼦类重写⽗类的全部接⼝⽅ 法

    3 ⽗类(接⼝类型) 指针/引⽤ 指 向⼦类对象

    ⼀旦有interface出现 ,⼀定要针对interface去写业 务

    多态具有架构思想和调⽤未来代码的意义

    ⾯向对象的开闭原则

    给⼀个类添加⼀个新的功能,不需要修改该类,⽽是通过额外的 添加代码来实现,保证了之前原有系统的安全性

    ⾯向对象的依赖倒转原则

    抽象层

    先设计抽象层接⼝,实现⼀个⼀个的interface

    设计难度较⼤,不要轻易修改

    实现层

    ⾯向抽象层 是实现具体的类,将接⼝全部实现

    业务逻辑层

    ⾯向抽象层,去编织业务逻辑

    总结:接⼝的意义 多态的思想 调⽤未来

  • 相关阅读:
    jenkins安装
    HTTP协议客户端是如何向服务器发送请求
    接口概念
    fiddler导出har格式转化成yml格式

    双硬盘双系统装错了记录
    chrome的版本和driver版本对应表
    monkey详解
    adb命令熟悉
    cookie、session、token
  • 原文地址:https://www.cnblogs.com/peteremperor/p/13706226.html
Copyright © 2011-2022 走看看