Я, начинающий программист на C#, спорю сейчас с программистом на C++. Он утверждает, что в ООП переменная - это не объект, во всяком случае в C++. Я утверждаю, что переменная - это в корне тоже объект определенного типа в любом объктно-ориентированном языке. Кто из нас прав? Хотелось бы услышать мнение профессионалов.
Ответ
В С это не так - там просто нет понятия "объект". =) Объект отличается от не объекта тем, что он имеет сложное и активное внутреннее устройство. Не объект всего лишь является отображением участка памяти. Будь то просто число, указатель, некий обычный массив или структура. Действия над ними - просто оперирование данными в памяти. Взял - изменил - положил обратно. Вне зависимости от содержимого участка памяти. И переменная эта никаких возмущений в эти действия не вносит. Объект - это тоже отображение участка памяти. Но только доступ к нему осуществляется уже не напрямую, а через посредников - через свойства, методы класса и т.д. То есть в любом случае происходит вызов некоторой процедуры, реализующей метод класса, которой передаются указатель на объект и аргументы (или как-то похоже). Что в этой процедуре произойдёт - одному разработчику известно. Ну и документации. Моё мнение - в компилируемом и статически типизируемом языке обычно (но вовсе не обязательно) простые переменные не являются объектами. В C# практически любая переменная - объект (как справедливо заметили, за исключением указателей). Ввиду того, что типы int, string, char и все иные - это, так сказать, синонимы соответствующих классов: System.Int32, System.String, System.Char. В С++ - нет. А в динамически типизируемом языке у каждой переменной, как минимум, есть скрытые свойства - тип, например. И действия совершаются различные в зависимости от содержимого оного свойства. И оператор + числа сложит, строки склеит и т.д.
Комментариев нет:
Отправить комментарий