Что делает язык объектно-ориентированным? - PullRequest
33 голосов
/ 27 августа 2008

Поскольку дискуссия без содержательных терминов бессмысленна , я решил указать на слона в комнате и спросить: что именно делает язык "объектно-ориентированным"? Здесь я не ищу ответ из учебника, а на основе вашего опыта работы с ОО-языками, которые хорошо работают в вашей области, какой бы она ни была.

Смежный вопрос, который может помочь ответить первым: что такое архетип объектно-ориентированных языков и почему?

Ответы [ 15 ]

0 голосов
/ 15 января 2010

когда вы можете создавать классы, это объектно-ориентированный
например: java является объектно-ориентированным, javascript - нет, а c ++ выглядит как «объектно-любопытный» язык

0 голосов
/ 27 августа 2008

В дополнение к тому, что сказал aib, я бы сказал, что язык на самом деле не является объектно-ориентированным, если только доступные стандартные библиотеки не являются объектно-ориентированными. Самый большой пример этого - PHP. Хотя он поддерживает все стандартные объектно-ориентированные концепции, тот факт, что такой большой процент стандартных библиотек не является объектно-ориентированным, означает, что практически невозможно написать ваш код объектно-ориентированным способом.

Неважно, что они вводят пространства имен, если все стандартные библиотеки все еще требуют от вас префикса всех вызовов функций с такими вещами, как mysql_ и pgsql_, когда в языке, который поддерживает пространства имен в реальном API, вы можете избавиться функций с mysql_ и имеют просто "include system.db.mysql. *" в верхней части вашего файла, чтобы он знал, откуда взялись эти вещи.

0 голосов
/ 27 августа 2008

Несмотря на теоретические последствия, кажется,

"Любой язык с ключевым словом" class "": -P

0 голосов
/ 27 августа 2008

Архетип

Возможность выражать реальные сценарии в коде.

foreach(House house in location.Houses)
{
 foreach(Deliverable mail in new Mailbag(new Deliverable[]
              {
              GetLetters(), 
              GetPackages(), 
              GetAdvertisingJunk()
              })
 {
    if(mail.AddressedTo(house))
    {
        house.Deliver(mail);
    }
 }
}

-

foreach(Deliverable myMail in GetMail())
{
    IReadable readable = myMail as IReadable;
    if ( readable != null )
    {
        Console.WriteLine(readable.Text);
    }
}

Почему?

Чтобы помочь нам понять это легче. Это имеет смысл в наших головах, и при правильной реализации делает код более эффективным, многократно используемым и уменьшает количество повторений.

Для этого вам нужно:

  • Указатели / Ссылки , чтобы гарантировать, что это == это и это! = Это.
  • Классы для указания (например, на руку), которые хранят данные (int hairyness) и операции (Throw (IThrowable))
  • Полиморфизм (наследование и / или интерфейсы) для обработки определенных объектов в общем виде, так что вы можете читать книги и граффити на стене (оба реализуют IReadable)
  • Инкапсуляция , поскольку яблоко не предоставляет свойство Atoms []
0 голосов
/ 27 августа 2008

Поддерживает классы, методы, атрибуты, инкапсуляцию, сокрытие данных, наследование, полиморфизм, абстракцию ...?

...