4.23.5 abstraction

4.23.5 abstraction

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

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

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

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

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

 1package main
 2
 3import "fmt"
 4
 5// Shape is an interface that defines the basic methods for a shape.
 6type Shape interface {
 7	Area() float64
 8	Perimeter() float64
 9}
10
11// Rectangle is a struct that implements the Shape interface.
12type Rectangle struct {
13	width, height float64
14}
15
16// Area returns the area of the rectangle.
17func (r Rectangle) Area() float64 {
18	return r.width * r.height
19}
20
21// Perimeter returns the perimeter of the rectangle.
22func (r Rectangle) Perimeter() float64 {
23	return 2 * (r.width + r.height)
24}
25
26// Circle is a struct that implements the Shape interface.
27type Circle struct {
28	radius float64
29}
30
31// Area returns the area of the circle.
32func (c Circle) Area() float64 {
33	return 3.14 * c.radius * c.radius
34}
35
36// Perimeter returns the perimeter of the circle.
37func (c Circle) Perimeter() float64 {
38	return 2 * 3.14 * c.radius
39}
40
41func main() {
42	// Create a rectangle and a circle.
43	r := Rectangle{width: 10, height: 20}
44	c := Circle{radius: 5}
45
46	// Declare a slice of Shape interfaces.
47	shapes := []Shape{r, c}
48
49	// Iterate over the shapes and print their area and perimeter.
50	for _, shape := range shapes {
51		fmt.Println("Area:", shape.Area())
52		fmt.Println("Perimeter:", shape.Perimeter())
53		fmt.Println("")
54	}
55}
1$ go run main.go
2Area: 200
3Perimeter: 60
4
5Area: 78.5
6Perimeter: 31.400000000000002

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