Menu
Coddy logo textTech

מימוש ממשק

חלק מהיחידה לוגיקה וזרימת התוכנית במסלול ה-GO של Coddy. שיעור 14 מתוך 68.

עכשיו, כשאתה יודע איך להגדיר ממשק, בוא נלמד איך טיפוסי Go מממשים אותם בפועל. הדבר החשוב ביותר להבין הוא ש-Go משתמשת במימוש משתמע — אין צורך במילת מפתח או בהצהרה מיוחדת.

אם לטיפוס יש את כל המתודות שממשק דורש, הוא מקיים את הממשק באופן אוטומטי. אין צורך לציין במפורש שהטיפוס שלך מממש את הממשק — Go מזהה זאת בעצמו.

כך זה עובד עם הממשק Shaper מהשיעור הקודם:

type Circle struct {
    Radius float64
}

func (c Circle) Area() float64 {
    return 3.14159 * c.Radius * c.Radius
}

מכיוון שלטיפוס Circle יש מתודה Area() שמחזירה float64, הוא מממש באופן אוטומטי את הממשק Shaper. אין צורך להצהיר על הקשר הזה במפורש - Go מזהה אותו על סמך התאמה של חתימת המתודה.

הגישה המרומזת הזו הופכת את הממשקים של Go לגמישים להפליא. כל טיפוס קיים יכול לממש ממשק חדש כל עוד יש לו את המתודות הנדרשות, אפילו אם הממשק נוצר אחרי כתיבת הטיפוס.

challenge icon

אתגר

קל

באתגר הזה תתרגלו מימוש של ממשק באמצעות יצירת מערכת פשוטה של כלי רכב. תיצרו מבנה Car שמממש באופן אוטומטי ממשק Vehicle באמצעות המימוש המרומז של Go.

תקבלו שתי קלטים:

  • מחרוזת שמייצגת את יצרן הרכב (לדוגמה, "Toyota")
  • מחרוזת שמייצגת את מהירות הרכב בקמ״ש (לדוגמה, "120")

המשימה שלכם היא:

  1. להגדיר ממשק Vehicle עם חתימת מתודה אחת: GetInfo() שמחזירה מחרוזת
  2. להגדיר מבנה Car עם שני שדות: Brand (מחרוזת) ו-Speed (מספר שלם)
  3. לממש את המתודה GetInfo() עבור המבנה Car, כך שתחזיר מחרוזת בפורמט: "Brand: [brand], Speed: [speed] km/h"
  4. לנתח את הקלטים כדי ליצור מופע של Car
  5. לקרוא למתודה GetInfo() ולהדפיס את התוצאה

זכרו שב-Go, המבנה Car יממש באופן אוטומטי את הממשק Vehicle, מכיוון שיש לו את המתודה הנדרשת GetInfo() עם החתימה הנכונה. אין צורך להצהיר במפורש ש-Car מממש את Vehicle — Go מזהה את הקשר הזה באופן מרומז.

נסו בעצמכם

package main

import (
	"fmt"
	"strconv"
)

// TODO: 1. הגדירו את הממשק Vehicle עם המתודה GetInfo() שמחזירה string

// TODO: 2. הגדירו את המבנה Car עם השדות Brand (string) ו-Speed (int)

// TODO: 3. ממשו את המתודה GetInfo() עבור Car

func main() {
	// קראו את הקלט
	var brand string
	var speedStr string
	fmt.Scanln(&brand)
	fmt.Scanln(&speedStr)

	// המירו את מחרוזת המהירות למספר שלם
	speed, _ := strconv.Atoi(speedStr)

	// TODO: 4. צרו מופע של Car באמצעות brand ו-speed, ואז קראו ל-GetInfo()
	result := "" // החליפו שורה זו במימוש שלכם
	_ = brand
	_ = speed

	// הדפיסו את התוצאה
	fmt.Println(result)
}
quiz iconבחנו את עצמכם

השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.

כל השיעורים ביחידה לוגיקה וזרימת התוכנית

תרגלו בעצמכם: קומפיילר Go אונליין