Для чего в Java нужны конструкторы?

zrab

Сабж, собственно. И еще: приведите пример простого кода, в котором невозможно без конструктора или очень геморно без оного. А то смотришь на такую конструкцию
public class Net {

private final int NUMBER = 1;

public Net( Raw raw) {
System.out.println("all right");
this.raw= raw;
}
...
}
Здесь raw - какой-то другой класс.
Честно, пытался разобраться, читал книги, но ничего так и не понял.

pitrik2

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

Maurog

конструкторы - это всего лишь методы класса, вызывающиеся автоматически при создании объекта. это лишь помогает программисту писать меньше буковок.
вместо двух строчек
 

x = new Net;
x->setRaw(Raw);

можно писать
 

x = new Net(Raw);

Строчек меньше, а функциональность та же.
ну еще внутренние переменные объект сам устанавливает в нужные значения благодаря конструкторам.

kruzer25

вместо двух строчек ... можно писать
И нельзя просто написать "x = new Net;", а потом удивляться, почему это в другом месте всё упало из-за отсутствия Net::raw.

bastii

Есть идея, что объединение создания объекта и его инициализации позволяются справиться в проблемой объектов в промежуточном некорректном состоянии. Хотя на практике неоднократно замечал, что для пользователя класса это не всегда удобно. Мне кажется, что во внутреннем коде лучше активно использовать конструкторы, а для внешнего АПИ лучше использовать более "открытую" инициализацию (особенно если имеется большее разнообразие пользователей и сценариев использования предоставляемой через этот АПИ функциональности).

zrab

конструкторы - это всего лишь методы класса, вызывающиеся автоматически при создании объекта. это лишь помогает программисту писать меньше буковок.
вместо двух строчек
Только и всего? просто не совсем понятно, зачем после объявления класса в нем же вызывается конструктор. Можешь, если не тяжело, на словах объяснить? (если не заберет много времени, само собой).

kruzer25

не совсем понятно, зачем после объявления класса в нем же вызывается конструктор
Не совсем понятно, что ты имел в виду? В ком, где и как вызвался конструктор, и почему тебе хэто не понравилось?

kruzer25

Вообще, по твоим постам у меня появилось такое впечатление (ну да, я телепат что ты не совсем отличаешь классы от объектов

Ivan8209

> ты не совсем отличаешь классы от объектов
И чем они отличаются?
---
...Я работаю антинаучным аферистом...

kruzer25

Скажи, что такое файл - расскажу, чем отличаются

Ivan8209

Файлов здесь нет --- PalmOS.
---
...Я работаю антинаучным аферистом...

smit1

>И чем они отличаются?
Класс - мозгоёбы
Объект - КОНТРА
---
...А я милого узнаю по походке...

pitrik2

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

kruzer25

а конструкторы еще нужны для ограничения доступа, чтобы например кому не положено не мог экземпляр класса создать
Здесь не тот случай

Ivan8209

Ладно, по просьбе , открою тебе истину.
Классы и объекты отличаются только у тех, кто не знает ООП,
а потому выдаёт за ООП обыкновенную процедурщину.
Если ты будешь последовательно объективизировать понятия,
то ты получишь то, что получили товарищи-смолтолкеры:
класс --- тот же объект.
---
"Vyroba umelych lidi, slecno, je tovarni tajemstvi."

Dasar

класс является объектом, но это не значит, что класс = объект.

Ivan8209

Для математиков-программистов поясняю:
"класс есть объект" не совпадает с "класс = объект."
---
"Аллах не ведёт людей неверных."

Dasar

ты мой пост не прочитал. слив засчитан.

Ivan8209

Я твоё сообщение прекрасно прочитал, а вот ты моё --- нет.
С тебя объяснение, чем класс отличается от объекта.
---
"Аллах не ведёт людей неверных."

bastii

В контексте языка Java и вопроса про конструкторы, какое это имеет значение? Это я имею виду тему класса как объекта. Тем более не понятно как это связано с выдаванием ООП за "обыкновенную процедурщину".

Hastya

Забей. Дай Контре слить.

Ivan8209

> В <...> вопроса про конструкторы, какое это имеет значение?
придаёт этому какое-то значение, а раз он этому
ещё и учить пытается, пусть объясняет.
, кстати, тоже.
---
...Я работаю антинаучным аферистом...

Dasar

С тебя объяснение, чем класс отличается от объекта.
поведением, хотя бы таким - изменение набора методов у класса - вызывает изменение набора методов всех экземпляров данного класса, изменение набора методов у объекта - вызывает измнение набора методов только у этого одного экземпляра.
или другими словами - класс является обобщением(доп. метауровнем) над неким набором объектов, объект, в общем случае, таким метауровнем не является.
С тебя объяснение, чем класс отличается от объекта.
вот видишь, можешь же читать чужие сообщения, и задавать правильные вопросы.

pitrik2

, кстати, тоже.
не вижу где
Вы же оба говорите одно и то же
класс является объектом, но это не значит, что класс = объект.
"класс есть объект" не совпадает с "класс = объект."
я не вижу отличия в этих двух фразах
а ничего друго в этом топике не сказал
так что либо он "не кстати и не тоже", либо "КОНТРА, кстати, тоже"

Ivan8209

> изменение набора методов у класса - вызывает изменение набора
> методов всех экземпляров данного класса,
> изменение набора методов у объекта - вызывает измнение набора
> методов только у этого одного экземпляра.
Ты говоришь про модульную парадигму, которая замаскирована под ООП:
объект у тебя не является самостоятельной сущностью, а действует
исключительно через посторонний, имеющий самостоятельное значение
слой, занимающийся динамическим сопоставлением сигнатур процедур.
> или другими словами - класс является обобщением
> (доп. метауровнем) над неким набором объектов, объект,
> в общем случае, таким метауровнем не является.
Вот я и говорю, что ты говоришь не про объектно-ориентированное
программирование, а про обычное модульное: модуль является
обобщением над некоторым набором переменных, процедур и проч.
---
...Я работаю антинаучным аферистом...

Ivan8209

> я не вижу отличия в этих двух фразах
в таких случаях говорит про суслика.
---
"Тот, кто знает, знает, а кто не знает, не знает."

Dasar

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

Ivan8209

> из каких моих слов - это следует? где я говорил,
> что объект действует через вспомогательный слой?
Там были все нужные слова, ты их удалил,
теперь пользуйся ссылками.
---
"Аллах не ведёт людей неверных."

enochka1145

>И чем они отличаются?
Класс - мозгоёбы
Объект - КОНТРА
---
...А я милого узнаю по походке...

enochka1145

- Василий Иванович, а кто такой дурак?
- Это индивидуум, изъясняющийся так, что другие его понять не могут. Понял?
- Нет...

bleyman

> Ладно, по просьбе , открою тебе истину.
?
> Классы и объекты отличаются только у тех, кто не знает ООП,
> а потому выдаёт за ООП обыкновенную процедурщину.
> Если ты будешь последовательно объективизировать понятия,
> то ты получишь то, что получили товарищи-смолтолкеры:
> класс --- тот же объект.
Если мне не изменяет зрение, ты сказал, что классы и объекты не отличаются. Типа, одно и то же.
Ты был неправ и тебе даже внятно объяснили, где именно. Действительно, если как следует объективизироваться, то получается категория "Объекты", которая включает вообще всё, и её подкатегория "Классы". Все классы являются объектами, но не все объекты являются классами, следовательно, это разные вещи.
Теперь, вместо того, чтобы сказать "Да, я далбайоп и был неправ, простите меня пожалуйста", ты пытаешься сделать вид, что твои оппоненты — идиоты и не знают этих действительно довольно-таки элементарных вещей.

Dasar

модуль является обобщением над некоторым набором переменных, процедур и проч
это вообще-то композиция, а не обобщение.
ты что действительно не понимаешь разницу между отношением "обобщение" и отношением "композиция"?

danilov

А объясните попонятнее, что есть класс и объект.
Всегда думал, что объект - просто представитель (экземпляр) класса...
А тут чё-то про композиции пишут... Видимо, правда, что Жава хавает моск

Dasar

> Всегда думал, что объект - просто представитель (экземпляр) класса...
так оно и есть
> А тут чё-то про композиции пишут... Видимо, правда, что Жава хавает моск
класс и объект являются композицией свойств и методов

6yrop

да, если можно, поясните по-подробнее. Когда-то давно в какой-то книжке читал, что в смолтолке (видимо, какой-то загадочный супер язык действительно, разделение понятий объекта и класса не такое явное как скажем в Java/C#. Но в то время я не совсем понял, что имелось ввиду.
 
Все классы являются объектами...
  

Что это дает? как это выглядит синтаксически, в рантайме?

Marinavo_0507

> видимо, какой-то загадочный супер язык
не то чтобы супер, просто объектно-ориентированный
> как это выглядит синтаксически, в рантайме?
там всё выглядит в виде посылок сообщений объектам

6yrop

а где живут объекты? а где классы?

Marinavo_0507

в виртуальной машине, естественно

Dasar

Что это дает? как это выглядит синтаксически, в рантайме?
так у тебя уже в C#/Java класс является объектом, правда, только на чтение
object obj = typeof(object);
в Smalltalk-е/JavaScript-е класс уже получше, там можно не только посмотреть какие методы/свойства есть, но их прямо в runtime-е и добавить.
больше всего класс похож на объект в каком-нибудь CLOS-е, где порождение новых экземпляров объектов происходит через клонирование.

bleyman

порождение новых экземпляров объектов происходит через клонирование.
Дык ведь это, объект инкапсулирует не только методы (обработчики мессаг но и, извиняюсь, данные.
При инстантиации (инстанциации? инстанцировании?) в стандартных процедурно-ООП языках происходит появление storage для обычных полей (которого нет в классе и, наоборот, не происходит для static (которые как раз в классе хранятся). Статики, допустим, ещё можно симулировать через синглтоны (то есть это оно так и есть на самом деле но вот появление в "классе" ненужных нестатических полей — это бред же.

Dasar

> инстантиации (инстанциации? инстанцировании?)
инстанциирование
> но вот появление в "классе" ненужных нестатических полей — это бред же.
так это скорее прототип, чем класс.

pitrik2

> инстантиации (инстанциации? инстанцировании?)
инстанциирование
ага
он чуть чуть не дотопал

slonishka

инстанцианизация!

kruzer25

Всегда думал, что объект - просто представитель (экземпляр) класса...
нго сам класс, в общем-то, тоже можно рассматривать как объект - у него есть методы, есть члены...

pilot

это лишь помогает программисту писать меньше буковок.
А смена языка на нормальный гораздо лучше помогает

danilov

Ну да, но в жаве это какой-то недокласс - ни наследования, ни виртуальных функций...
Оставить комментарий
Имя или ник:
Комментарий: