Commit 41583d70 authored by Boris Mühmer (ADESTIS)'s avatar Boris Mühmer (ADESTIS) 💬
Browse files

added inheritance based on interfaces

parent f054ff99
Loading
Loading
Loading
Loading
+37 −0
Original line number Diff line number Diff line
package circle

import (
	"fmt"
	"math"
)

// CircleT ...
type CircleT struct {
	r float64
}

// New ...
func New(r float64) *CircleT {
	return &CircleT{
		r: r,
	}
}

const (
	formatString = "circle{radius:%f}"
)

// String ...
func (c *CircleT) String() string {
	return fmt.Sprintf(formatString, c.r)
}

// Area ...
func (c *CircleT) Area() float64{
	return math.Pi * math.Pow(c.r, 2.0)
}

// Perimeter ...
func (c *CircleT) Perimeter() float64{
	return 2.0 * c.r * math.Pi
}
 No newline at end of file
+10 −0
Original line number Diff line number Diff line
package circle

import (
	"testing"
)

func TestCircle(t *testing.T) {
	c := New(5)
	t.Logf("c: %s", c)
}
 No newline at end of file
+25 −0
Original line number Diff line number Diff line
package inheritance

// Geometrier ...
type Geometrier interface{
	String() string
	Area() float64
	Perimeter() float64
}

// Rectangler ...
type Rectangler interface {
	Geometrier
	A() float64
	SetA(float64) float64
	B() float64
	SetB(float64) float64
}


// Circler ...
type Circler interface {
	Geometrier
	Radius() float64
	SetRadius(float64) float64
}
 No newline at end of file
+16 −0
Original line number Diff line number Diff line
package inheritance

import (
	"testing"
	"repositories.muehmer.net/bsmrgo/playground/inheritance/circle"
	"repositories.muehmer.net/bsmrgo/playground/inheritance/rectangle"
)

func TestGeometry(t *testing.T){
	for _, g := range []Geometrier{
		circle.New(1),
		rectangle.New(3,4),
	}	{
		t.Logf("%s: Area():%f - Perimeter():%f", g, g.Area(), g.Perimeter())
	}
}
 No newline at end of file
+37 −0
Original line number Diff line number Diff line
package rectangle

import (
	"fmt"
)

// RectangleT ...
type RectangleT struct {
	a, b float64
}

// New ...
func New(a,b float64) *RectangleT {
	return &RectangleT{
		a: a,
		b: b,
	}
}

const (
	formatString = "rectangle{a:%f,b:%f}"
)

// String ...
func (r *RectangleT) String() string {
	return fmt.Sprintf(formatString, r.a, r.b)
}

// Area ...
func (r *RectangleT) Area() float64{
	return r.a * r.b
}

// Perimeter ...
func (r *RectangleT) Perimeter() float64{
	return 2.0*(r.a + r.b)
}
Loading