4.23.5 abstraction

4.23.5 abstraction

Abstraction (به معنای انتزاع)، فرآیند حذف یا از بین بردن برخی ویژگی‌های غیرضروری یک چیز به‌منظور کاهش، خلاصه‌سازی و به کار بردن آن در مجموعه‌ای از ویژگی‌های ضروری است. در برنامه‌نویسی شیءگرا(OOP)، انتزاع یکی از سه مفهوم اصلی (به همراه مفاهیم Encapsulation و Inheritance) است.

به نقل از ویکی پدیا : انتزاع،[۱] (به انگلیسی: Abstraction) تجرید یا آهنجش فرایند اختصار، فشرده‌سازی، و تلخیص اطّلاعات از طریق شناسائی، استخراج و سپس، جداسازی و پنهان‌سازی جزئیّات[۲] از کلیّات[۳] است. انتزاع در لغت به معنای جدا کردن، گرفتن، درآوردن جزئی از یک کل[۴] و به معنای بازداشتن و امتناع کردن، برکندن و از جای کشیدن، گرفتن، و دور شدن می‌باشد.[۵]

انتزاع فرایند یا نتیجهٔ تعمیم بخشیدن با کاهش محتوای اطلاعاتی یک مفهوم یا یک پدیدهٔ قابل مشاهده، جهت حفظ اطلاعات برای منظور خاص می‌باشد.

در زبان گو abstraction با استفاده از اینترفیس می توان انجام داد. یک اینترفیس یکسری متد دارد که ما این متدها را برای هریک از تایپ های مختلف پیاده سازی می کنیم.

به مثال زیر توجه کنید :

package main

import "fmt"

// Shape is an interface that defines the basic methods for a shape.
type Shape interface {
	Area() float64
	Perimeter() float64
}

// Rectangle is a struct that implements the Shape interface.
type Rectangle struct {
	width, height float64
}

// Area returns the area of the rectangle.
func (r Rectangle) Area() float64 {
	return r.width * r.height
}

// Perimeter returns the perimeter of the rectangle.
func (r Rectangle) Perimeter() float64 {
	return 2 * (r.width + r.height)
}

// Circle is a struct that implements the Shape interface.
type Circle struct {
	radius float64
}

// Area returns the area of the circle.
func (c Circle) Area() float64 {
	return 3.14 * c.radius * c.radius
}

// Perimeter returns the perimeter of the circle.
func (c Circle) Perimeter() float64 {
	return 2 * 3.14 * c.radius
}

func main() {
	// Create a rectangle and a circle.
	r := Rectangle{width: 10, height: 20}
	c := Circle{radius: 5}

	// Declare a slice of Shape interfaces.
	shapes := []Shape{r, c}

	// Iterate over the shapes and print their area and perimeter.
	for _, shape := range shapes {
		fmt.Println("Area:", shape.Area())
		fmt.Println("Perimeter:", shape.Perimeter())
		fmt.Println("")
	}
}

در کد فوق ما یک اینترفیس Shape داریم که ۲ تا متد Area و Perimeter داریم که مساحت و محیط را محاسبه می کند. در ادامه ۲ ساختار Rectangle و Circle داریم که برای این ساختارها متدهای اینترفیس Shape را پیاده سازی کردیم و در نهایت اندازه مساحت و محیط را محاسبه می کنیم.