Какой общий термин для класса и объекта? - PullRequest
0 голосов
/ 14 апреля 2020

Все языки OOP поддерживают наличие переменной, ссылающейся на объект. Но некоторые языки также поддерживают наличие переменной, ссылающейся на класс (тип ссылки на класс). Скажем, у меня есть метод, который будет принимать объект или класс в качестве параметра. Что бы я назвал параметром? Другими словами, есть ли термин, который одновременно инкапсулирует «объект» и «класс»?

Для дальнейшего пояснения, вот некоторый (иначе бесполезный) код PHP, который иллюстрирует, что я имею в виду под ссылкой на класс против ссылки на объект :

<?php
class Foo {
    public function shout(string $message) {
        echo strtoupper("$message\n");
    }
}

class Bar {
    public function shout(string $message) {
        echo "!!! $message !!!\n";
    }
}

/**
 * @param mixed $classOrObject
 */
function shoutOut($classOrObject) {

    if (is_object($classOrObject)) {
        $classOrObject->shout('I got an object');
    } elseif (is_string($classOrObject)) {
        $object = new $classOrObject();
        $object->shout('I got a class');
    }

}

shoutOut(new Foo());
shoutOut(Bar::class);

Таким образом, перефразировать вопрос можно следующим образом:

Как лучше назвать параметр $ classOrObject?

В качестве третьего Попытайтесь найти то, что я действительно здесь хочу, представьте, что вы пишете введение в OOP. Вы могли бы сказать что-то вроде

Основными компонентами парадигмы OOP являются класс и объект.

Так что, если бы мы заменили «основные ингредиенты» на более теоретически точный термин, мой вопрос, что бы это был за термин? Если бы классы были яблоками, а предметы - грушами, мы бы назвали их обоих "фруктами". Но классы и объекты не являются фруктами, так как мы их называем?

1 Ответ

0 голосов
/ 14 апреля 2020

Объект является экземпляром класса. Класс похож на форму, а объект - это элемент, созданный с помощью этой формы.

...