Menu
Coddy logo textTech

Итоги: Фигуры и поведение

Часть раздела Логика и управление потоком путешествия по GO на Coddy — урок 19 из 68.

challenge icon

Задание

Легко

В этом испытании вы создадите систему связи, которая демонстрирует полиморфизм через интерфейсы. Вы создадите интерфейс Speaker и реализуете его с различными типами, которые могут «говорить» своими уникальными способами.

Вы получите три входных значения:

  • Строка, представляющая количество создаваемых объектов (например, "3")
  • Строка, содержащая типы объектов, разделенные запятыми (например, "person,parrot,person")
  • Строка, содержащая имена объектов, разделенные запятыми (например, "Alice,Polly,Bob")

Ваша задача:

  1. Определить интерфейс Speaker с одной сигнатурой метода: Speak(), который возвращает строку
  2. Определить структуру Person с полем Name (string)
  3. Определить структуру Parrot с полем Name (string)
  4. Реализовать метод Speak() для обеих структур:
    • Person должен возвращать: "Hello, I'm [name]"
    • Parrot должен возвращать: "Squawk! [name] says hello!"
  5. Создать функцию с именем makeAllSpeak, которая принимает срез (slice) интерфейсов Speaker в качестве параметра
  6. Внутри makeAllSpeak перебрать срез и вызвать метод Speak() для каждого объекта, выводя результат на печать
  7. Разобрать входные данные для создания соответствующих экземпляров объектов на основе предоставленных типов и имен
  8. Сохранить все объекты в срезе интерфейсов Speaker
  9. Вызвать makeAllSpeak с вашим срезом объектов

Объекты должны создаваться в том порядке, в котором они появляются во входных данных. Например, если типы — "person,parrot,person", а имена — "Alice,Polly,Bob", создайте Person по имени Alice, затем Parrot по имени Polly, а затем Person по имени Bob. Это испытание демонстрирует, как различные типы могут обрабатываться единообразно через общий интерфейс, показывая мощь полиморфизма в Go.

Попробуйте сами

package main

import (
	"fmt"
	"strconv"
	"strings"
)

func main() {
	// Чтение входных данных
	var numSpeakersStr string
	var speakerTypesStr string
	var speakerNamesStr string
	
	fmt.Scanln(&numSpeakersStr)
	fmt.Scanln(&speakerTypesStr)
	fmt.Scanln(&speakerNamesStr)
	
	// Парсинг входных данных
	numSpeakers, _ := strconv.Atoi(numSpeakersStr)
	speakerTypes := strings.Split(speakerTypesStr, ",")
	speakerNames := strings.Split(speakerNamesStr, ",")
	
	// TODO: Напишите свой код ниже
	// 1. Определите интерфейс Speaker
	// 2. Определите структуры Person и Parrot
	// 3. Реализуйте методы Speak() для обеих структур
	// 4. Создайте функцию makeAllSpeak
	// 5. Создайте объекты speaker на основе входных данных и сохраните их в срез
	// 6. Вызовите makeAllSpeak с вашим срезом
	
}

Все уроки раздела Логика и управление потоком