которые приходят первым классом или объектом в объектно-ориентированных языках?концепция класса и объекта
ответ
Объект - это экземпляр класса. Класс на первом месте.
Класс представляет собой схему или шаблон объекта. Это точная компоновка, которая описывает, как построить объект. В классическом смысле OO сначала требуется класс для создания объекта.
Это философский вопрос: лучше ли в реальности подход сверху вниз (сначала класс, затем объект) или подход снизу вверх (объект сначала, а затем абстракция класса).
Наконец, очевидно, что кто-то может придумать язык, который использует концепции OO без классов, но IMO, на самом деле это не вопрос.
... возможно, но не в языках oop, у которых нет классов. – daf
Язык не может быть объектно ориентированным, если вначале нечего создавать объект. Конечно, просто наличие объектов не делает язык ООП, но для него достаточно фундаментальная потребность. – Esko
Основанные на прототипе языки OO и языки OO, основанные на характеристиках, не требуют занятий. –
Подумайте о классе как резаке для печенья и о предмете в качестве печенья. Классы - это спецификации; объекты реализуют эти спецификации в памяти.
Занятия на первом месте. Не может быть объекта без класса.
Я бы сказал, его класс. Представьте себе шаблон человеческого тела без жизни и атрибутов. И когда вы дадите вышеупомянутую кровь и сердце ее прекрасную и живую. класс - это всего лишь шаблон, и объект - это одно свойство со всеми свойствами и индивидуальностью.
Согласно wikipedia, первый язык с явной поддержкой функций OOP был Simula, который включал понятие класса. Совсем недавно были зарегистрированы ООП, которые используют prototypes, а не такие классы, как javascript.
Simula does * not * есть классы и наследование. Классы и Наследование были добавлены намного позже, в Simula-67. Smalltalk вдохновлен Simula и изначально также не имел классов или наследования. Я думаю, что они были добавлены в Smalltalk-74 (или, может быть, Smalltalk-72). Итак, * оба * язык, введший термин «объект» * и * язык, который ввел термин «объектно-ориентированное программирование» *, не имеет классов. И Алан Кей публично осудил то, как текущее «классовое программирование» делается как анти-ООП. –
Интересное спасибо за исправление. –
Интересные статьи, посвященные симуле, дают понять, что языковые дизайнеры действительно считают язык не совсем полным до введения обобщающей концепции классов в 67. –
Это . Легче придумать хороший дизайн, если вы думаете об объектах вначале, а затем изучите, какие классы вам нужны, чтобы сделать их.
Не все языки ООП имеют классы - и они вам не нужны.
В Ruby, например, вы можете определить новые методы для объекта и просто клонировать сами объекты - или вы можете сделать традиционный дизайн и определить новые классы.
В «Я» вы не определяете классы вообще. Скорее вы добавляете методы в «прототипический примерный объект» и клонируете его, когда вам нужны новые «экземпляры».
Многим людям нравится начинать проектирование OO-систем с диаграммами классов, но, к сожалению, это симптом SQL-мышления, а не мышления OO. Прежде всего - объекты do вещи.
Тот факт, что люди, когда они говорят о «диаграмме UML», автоматически предполагают, что для обозначения «диаграммы классов UML», хотя UML также содержит несколько вариантов диаграмм объектов, действительно печально. Как вы сказали: классы ничего не делают, объекты делают. И это то, о чем идет речь в программировании: делать компьютеры * делать вещи. –
Я бы не сказал, что занятия ничего не делают. Они могут быть хорошим местом для некоторых работ по созданию и настройке экземпляров, но не на таких языках, как Java и C++, которые фактически не имеют методов класса (например, вы не можете обрабатывать статику полиморфно ... т.е. они не играть по правилам OO) – daf
Ну, но * причина * почему это не работает в Java и C++ и * работает * в Ruby и Smalltalk, потому что в классах Ruby и Smalltalk есть ... * TADA * ... объектов, а в Java и C++ - нет. Фактически, Ruby и Smalltalk также не имеют методов класса. Это просто обычные методы экземпляра метакласса объекта класса. –
В Java и C++ класс приходит первым. Не может быть объекта без класса.
Класс похож на план. Объект автомобиля. С помощью одного чертежа можно построить много автомобилей. С одним классом можно создать несколько объектов.
Это, в отличие от языков ООП на основе прототипов, таких как JavaScript. Там вы создаете общий объект и включаете его функции отдельно.
Но все же в реальной жизни у нас есть такие вещи, как частицы и атомы.Мы описали их подробности спустя миллионы лет - они существовали отлично, без какого-либо «класса» или определения того, как их создавать.
Класс - это синяя печать объекта, он представляет собой базовые формы, такие как целые числа, строки и т. Д. Поэтому теоретически объект 'typeof (object)' является самой базовой формой и не требует какого-либо класса.
Поэтому я бы сказал, что объект был первым, если кто-то не представит мне определение класса объекта.
Объект «идея» определенно на первом месте, мы создали классы для описания свойств каждого объекта.
Класс походит на общие ингредиенты и процедуру приготовления супа, а объект - суп.
Ингредиенты могут быть собственными объектами, поэтому определение класса для ингредиента будет, например: название ингредиента, цвет, размер и то, что вы можете сделать с ингредиентом.
Пример программирования:
class You {
string name;
string height;
string complexion;
void run() {
}
void swim() {
}
...
}
Я надеюсь, что это помогает.
Короткий ответ заключается в том, что объекты на первом месте.
Длинный ответ хорошо - долго :)
- Эти языки называются объектно-ориентированный, по причине.
- Каждый служащий языка OO, мантра, все является объектом. Сюда входят классы.
- Есть даже языки, хотя и не OO, поддержка объектно-ориентированное программирование (как Erlang)
- Мы можем думать о классах действительно в разных условиях:
- В большинстве баз класса на основе языков основной причины для использования классов поддерживает номинативную типизацию. Это возможность различать объекты по их «типу» (например, Fruit and Star).
- Занятия обычно играют роль именования. Я имею в виду, что некоторые языки OO (например, Java) не имеют явного представления об окружающей среде, они играют все классы, находящиеся в настоящее время в пути к классам.
- Класса может быть также использован в качестве шаблона для создания новых объектов, и, следовательно,
- класса обычно оптимизация хака - не дублировать информацию, общую для всех экземпляров класса (для методов экземпляра)
Я уверен, что есть намного больше, но это только для начала :)
«Каждый сотрудник OO использует мантру, все это объект. Сюда входят классы». - Это просто неправда. Классы C++ не являются объектами, и не все это объект в Java или C++. Исторически сложилось так, что в Simula-67 (первый язык OO, в котором впервые появились термины «класс» и «объект»), не было классов-объектов, или всего-есть-объект. –
Я должен был сказать больше всего. И не соблюдение этого правила на самом деле вредит языку. О C++ Я приведу Алана Кэя «На самом деле я составил термин« объектно-ориентированный », и могу сказать, что у меня не было C++.». В Java я мог представить некоторые причины включения примитивов (например, оптимизация, вероятность на C/C++, отсутствие необходимости в операторах и перегрузка операторов), но они также вредят языку. –
вы не возражаете перефразировать ваш вопрос? –
Что такое язык «opps»? – MAK