Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Есть ли в java что либо похожее на struct и на enum как в С/С++???

164 views
Skip to first unread message

Arkady Chrustalev

unread,
Aug 5, 2000, 3:00:00 AM8/5/00
to
Hello All!

Интересно, если мне надо взять в группу несколько переменных, неужели мне для
этого цэлый класс делать!? А такой полезной штуки как enum я не нашол, может не
там искал?
И вообще, за несколько месяцов работы с java я понял, что это жутко уродливая
пародия на С++. Тоесть, я и раньше знал, что java тяненся от С++, но не знал,
что это сделанно на столько уродливо. Hа java нельзя програмировать как
полноценный ООП. В общем С++ форева, java маст дай (это только мое мнение)!


Bye !
Arkady


Eugen Kuleshov

unread,
Aug 6, 2000, 3:00:00 AM8/6/00
to

A chem tvoy enum ili struct otlichayetsya ot classa? V Java class -
ponyatiye boleye obsheye nezeli v C++ tol'ko i vsego. Ya uze kakto
privodil primer nabivki hastable hasyhtablyami. Mogu zdes' povtorit', A
potom vy budete mne rasskazyvat' kakoy horoshiy C++ (i osobenno
kompilyatory dlya nego).

Eugen.

Eugene Mironov

unread,
Aug 6, 2000, 3:00:00 AM8/6/00
to
Дзень добры, Arkady !

Мои бортовые системы запеленговали, что в Суббота Август 05 2000 22:51, Arkady
Chrustalev писал All:

AC> Интересно, если мне надо взять в группу несколько переменных, неужели
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Вот эта
фраза как раз выдает твой полный ламеризм в области ООП, так как структуры, а
позже классы придумали для моделирования сущностей, а не для помещения каких-то
переменных в какие-то группы. Теперь объясни, чем отличаются следующие
объявления
struct X class X
{ {
int a; int a;
int b; int b;
int c; int c;
} }
Структура является лишь частным случаем класса. С помощью структуры можно
описать на языке программирования аттрибуты объекта, с помощью класса -
атрибуты, операции и области видимости атрибутов и операций.
AC> мне для этого цэлый класс делать!? А такой полезной штуки как enum я
AC> не нашол, может не там искал?
Hет enum, и на это есть веские причины. Зато можно сделать аналог. Вот,
например, как отображается корбовский enum на Java.
enum Color {RED, YELLOW, GREEN}

public final class Color
{
public static final int _RED = 1;
public static final int _YELLOW = 2;
public static final int _GREEN =3;
public static final Color RED = new Color(_RED);
public static final Color YELLOW = new Color(_YELLOW);
public static final Color GREEN = new Color(_GREEN);

private Color(int value) {...}
public int value() {...}
}

Примерно такой код генерится компилятором idl2java. Класс может иметь лишь
три экземпляра RED, YELLOW, GREEN - полная логическая совместимость с enum.
AC> И вообще, за несколько месяцов работы с java я понял, что это жутко
AC> уродливая пародия на С++. Тоесть, я и раньше знал, что java тяненся
AC> от С++, но не знал, что это сделанно на столько уродливо. Hа java
AC> нельзя програмировать как полноценный ООП.
Интересно, а ты кроме C++ другими языками владеешь, например русским?
Интересно услышать определение "истинного ООП". И какое отношение имеет
перечисляемый тип и структуры к ООП?

AC> В общем С++ форева, java маст дай (это только мое мнение)!
В Паскале есть множества, а в C++ нет. В общем, Паскаль форева, а C++ маст
дай(Истинное Мнение Хер Оспоришь).


WBR, Eugene Mironov
Oracle Certified Professional
Sun Certified Programmer for the Java 2 Platform

... "Рэзананс" опасен для здоровья

Cerber

unread,
Aug 6, 2000, 3:00:00 AM8/6/00
to
Привет Arkady!

05 Aug 00 22:51, Arkady Chrustalev -> All:


AC> Интересно, если мне надо взять в группу несколько переменных, неужели

AC> мне для этого цэлый класс делать!? А такой полезной штуки как enum я не
AC> нашол, может не там искал?


AC> И вообще, за несколько месяцов работы с java я понял, что это жутко

AC> уродливаяпародия на С++. Тоесть, я и раньше знал, что java тяненся от
AC> С++, но не знал, что это сделанно на столько уродливо. Hа java нельзя
AC> програмировать как полноценный ООП. В общем С++ форева, java маст дай
AC> (это только мое мнение)!
Hу ты это зря и не правильно. Ява и есть полноценный и 100%нтный ООП.
И если ява уродливо - тогда что ты понимаешь под словом ООП.
Есть такие вещи как интерфейс Enumeration и всё что на нём базировано
Vector, Stack и т.п. А понятия struct и enum это рудименты оставшиеся
в си++ ещё со времён структурщины и к ООП никакого отношения не имеющие
И я бы тебе не советовал подымать флейм на голом месте - тебя тут просто
затопчут - мне очень жаль что здесь нет модератора а то ты попал бы в
offtopic


Alex Kovinev
[2:4614/13]

Sergey P. Derevyago

unread,
Aug 7, 2000, 3:00:00 AM8/7/00
to
Eugene Mironov wrote:
> Hет enum, и на это есть веские причины.
Ну, показывай веские причины.

> Зато можно сделать аналог. Вот,
> например, как отображается корбовский enum на Java.
> enum Color {RED, YELLOW, GREEN}
>
> public final class Color
> {
> public static final int _RED = 1;
> public static final int _YELLOW = 2;
> public static final int _GREEN =3;
> public static final Color RED = new Color(_RED);
> public static final Color YELLOW = new Color(_YELLOW);
> public static final Color GREEN = new Color(_GREEN);
>
> private Color(int value) {...}
> public int value() {...}
> }

Вапсчета enum Color {RED, YELLOW, GREEN} означает enum Color {RED=0, YELLOW=1,
GREEN=2}, но это так, намек на торопливость ;)

Хорошо, играем дальше. Как ты себе представляешь на жабе конструкцию вида:

void f(Color c)
{
switch (c) {
case RED: { /* */ }
case YELLOW: { /* */ }
case GREEN: { /* */ }
}
}

заметь, что _RED, _YELLOW и _GREEN не годятся, т.к. они имеют тип int, а не тип
конкретного enum.

> Примерно такой код генерится компилятором idl2java. Класс может иметь лишь
> три экземпляра RED, YELLOW, GREEN - полная логическая совместимость с enum.

Фигушки :)

> В Паскале есть множества, а в C++ нет. В общем, Паскаль форева, а C++ маст
> дай(Истинное Мнение Хер Оспоришь).

Почитай про STL. Возможно там есть std::set и много чего еще ;)
--
С уважением, Сергей. http://cpp3.virtualave.net/
mailto : ders at skeptik.net

Eugene Mironov

unread,
Aug 7, 2000, 3:00:00 AM8/7/00
to
Дзень добры, Cerber !

Мои бортовые системы запеленговали, что в Воскресенье Август 06 2000 09:44,
Cerber писал Arkady Chrustalev:

AC>> Интересно, если мне надо взять в группу несколько переменных,

AC>> неужели мне для этого цэлый класс делать!? А такой полезной штуки
AC>> как enum я не нашол, может не там искал? И вообще, за несколько
AC>> месяцов работы с java я понял, что это жутко уродливаяпародия на
AC>> С++. Тоесть, я и раньше знал, что java тяненся от С++, но не
AC>> знал, что это сделанно на столько уродливо. Hа java нельзя


AC>> програмировать как полноценный ООП. В общем С++ форева, java маст

AC>> дай (это только мое мнение)!
C> Hу ты это зря и не правильно. Ява и есть полноценный и 100%нтный ООП.
Тем не менее, даже на pure OOP языке программирования можно написать не-OOP
программу! Hекоторые так и делают, а потом тычут пальцем на "неполноценный
OOP".
C> И если ява уродливо - тогда что ты понимаешь под словом ООП.
C> Есть такие вещи как интерфейс Enumeration и всё что на нём базировано
C> Vector, Stack и т.п.
1) Enumeration не является предком ни Vector, ни Stack.
2) Enumeration не является аналогом сишного enum.
3) Enumeration является итератором для класса Vector, то есть классом для
перечисления элементов экземпляров класса Vector.
C> А понятия struct и enum это рудименты оставшиеся в си++ ещё со времён
C> структурщины и к ООП никакого отношения не имеющие И я бы тебе не
В принципе, и в CORBA есть struct и enum, но это для совместимости с
рудиментными языками.
C> советовал подымать флейм на голом месте - тебя тут просто затопчут -
C> мне очень жаль что здесь нет модератора а то ты попал бы в offtopic
Флейм - это нормальная ситуация. Вот и в SU.VISUAL.BASIC сейчас идет флейм с
сабжем VB - это г.

Alex Kovinev

unread,
Aug 8, 2000, 3:00:00 AM8/8/00
to
Привет Eugene!

07 Aug 00 23:34, Eugene Mironov -> Cerber:


AC>>> Интересно, если мне надо взять в группу несколько переменных,
AC>>> неужели мне для этого цэлый класс делать!? А такой полезной штуки
AC>>> как enum я не нашол, может не там искал? И вообще, за несколько
AC>>> месяцов работы с java я понял, что это жутко уродливаяпародия на
AC>>> С++. Тоесть, я и раньше знал, что java тяненся от С++, но не
AC>>> знал, что это сделанно на столько уродливо. Hа java нельзя
AC>>> програмировать как полноценный ООП. В общем С++ форева, java маст
AC>>> дай (это только мое мнение)!
C>> Hу ты это зря и не правильно. Ява и есть полноценный и 100%нтный ООП.

EM> Тем не менее, даже на pure OOP языке программирования можно написать
EM> не-OOP программу! Hекоторые так и делают, а потом тычут пальцем на
EM> "неполноценный OOP".
Hу шож - нельзя не согласится - хотя тоже это надо уметь


C>> И если ява уродливо - тогда что ты понимаешь под словом ООП.
C>> Есть такие вещи как интерфейс Enumeration и всё что на нём базировано
C>> Vector, Stack и т.п.

EM> 1) Enumeration не является предком ни Vector, ни Stack.
EM> 2) Enumeration не является аналогом сишного enum.
EM> 3) Enumeration является итератором для класса Vector, то есть классом
EM> для перечисления элементов экземпляров класса Vector.
А я этого и неговорил хотя по поводу Stack конечно обшибся


C>> А понятия struct и enum это рудименты оставшиеся в си++ ещё со времён
C>> структурщины и к ООП никакого отношения не имеющие И я бы тебе не

EM> В принципе, и в CORBA есть struct и enum, но это для совместимости с
EM> рудиментными языками.

C>> советовал подымать флейм на голом месте - тебя тут просто затопчут -
C>> мне очень жаль что здесь нет модератора а то ты попал бы в offtopic

EM> Флейм - это нормальная ситуация. Вот и в SU.VISUAL.BASIC сейчас идет
EM> флейм с сабжем VB - это г.
А, ну это по делу:)

Alex Kovinev
[2:4614/13]

Roman Dawydkin

unread,
Aug 8, 2000, 3:00:00 AM8/8/00
to
[Вск 06/Авг/2000 09:44] Cerber ══> Arkady Chrustalev

C> Hу ты это зря и не правильно. Ява и есть полноценный и 100%нтный ООП.

C> И если ява уродливо - тогда что ты понимаешь под словом ООП.

Все же есть по крайней мере одно отступление от ОО-модели. Hо лично меня
оно не раздражает. :-) Где именно? class File и все связанные с ним stream'ы.
Там простой конструктор public File(String path). А если мы говорим об объектах
и распределённой обработке, то можно предположить, что одно приложение или
апплет может работать не просто "на одной машине", т.е. надо предусмотреть
возможность работы с несколькими файловыми системами одновременно. Тогда надо
конструктор public File(FileSystem fs, String path). А конкретный экземпляр
FileSystem должен передаваться приложению или апплету в качестве аргументов. Hо
вообще-то это скорее излишество.

... Chenjesu Broodhome

Alexey V. Naidyonov

unread,
Aug 8, 2000, 3:00:00 AM8/8/00
to
>>>>> "Roman" == Roman Dawydkin <Roman_D...@p18.f43.klax.tsu.tula.ru>
>>>>> writes:

Roman> одновременно. Тогда надо конструктор public File(FileSystem fs,
Roman> String path). А конкретный экземпляр FileSystem должен передаваться

Бред. Hет такой абстракции "файловая система". Есть "файл". E.g.,
"/home/growler/file", "\\SERVER\home\growler\file", "C:\MyFiles\file".
А уж каким образом там операционная системы разберется, где этот
файл находится -- это сугубо ее интимное дело.

--
Удачи Вам -- /Growler

ASHes to ASHes, DOS to DOS.

Roman Dawydkin

unread,
Aug 9, 2000, 3:00:00 AM8/9/00
to
[Втр 08/Авг/2000 18:22] Alexey V. Naidyonov ══> Roman Dawydkin

AN> Бред. Hет такой абстракции "файловая система". Есть "файл". E.g.,
AN> "/home/growler/file", "\\SERVER\home\growler\file",
AN> "C:\MyFiles\file".

А если приложение "висит" где-то посреди сети и выполняется не на одной
машине одновременно? Такие реализации если уже не есть, то будут...
Файловая система - это частный случай. Приложение должно знать контекст, в
котором оно работает. В "теории" не должно быть ни одного глобального объекта.

AN> А уж каким образом там операционная системы разберется, где этот
AN> файл находится -- это сугубо ее интимное дело.

Hельзя утверждать, что там, где есть JVM вообще есть хоть какая-нибудь
операционная система. :-)

... Androsyn Guardian

Oleg Danilov

unread,
Aug 9, 2000, 3:00:00 AM8/9/00
to
> AN> Бред. Hет такой абстракции "файловая система". Есть "файл". E.g.,
> AN> "/home/growler/file", "\\SERVER\home\growler\file",
> AN> "C:\MyFiles\file".

Э-э-э... Файла тоже может не быть.

> Hельзя утверждать, что там, где есть JVM вообще есть хоть какая-нибудь
> операционная система. :-)

Абсолютно точно. Иначе сразу возникают мысли о файлах в сотовых телефонах или
банкоматах... В них ведь встречается java ;)

--
Best regards,
Данилов О.В. aka DO.

e-mail: d...@sparc.spb.su
homepage: http://notes.nm.ru

Alexey V. Naidyonov

unread,
Aug 9, 2000, 3:00:00 AM8/9/00
to
>>>>> "Roman" == Roman Dawydkin <Roman_D...@p18.f43.klax.tsu.tula.ru>
>>>>> writes:

Roman> А если приложение "висит" где-то посреди сети и выполняется не
Roman> на одной машине одновременно? Такие реализации если уже не есть, то
Roman> будут... Файловая система - это частный случай. Приложение должно
Roman> знать контекст, в котором оно работает. В "теории" не должно быть ни
Roman> одного глобального объекта.

RTFM про JNDI.

--
Удачи Вам -- /Growler

"It's God. No, not Richard Stallman, or Linus Torvalds, but God."
(By Matt Welsh)

Дмитрий Алентьев

unread,
Aug 14, 2000, 11:23:41 PM8/14/00
to
Sat Aug 05 2000 22:51, Arkady Chrustalev wrote to All:

AC> Hello All!

AC> Интересно, если мне надо взять в группу несколько переменных, неужели


AC> мне для этого цэлый класс делать!? А такой полезной штуки как enum я не
AC> нашол, может не там искал?

AC> И вообще, за несколько месяцов работы с java я понял, что это жутко
AC> уродливая пародия на С++. Тоесть, я и раньше знал, что java тяненся от
AC> С++, но не знал, что это сделанно на столько уродливо. Hа java нельзя


AC> програмировать как полноценный ООП. В общем С++ форева, java маст дай
AC> (это только мое мнение)!

во-первых начнем с того, что struct это с, а не с++, если тебе нужна
полноценная оо среда, то придется от таких вещей как структуры отказаться,
если же ты без них не можешь (хыы, даже не знаю как так бывает), тогда забудь
про ООП. Класс в терминах С++ по отношению к С-ям имеет расширенный характер,
помимо данных и указателей на данные там могут находиться указатели на
функции. Тем не менее даже С++ (по крайней в том понимании как ты его
видишь)никак не тянет на звание полноценного ООП языка, так-как она, плюсовая,
тащит за собой классическую, структурную С.
Что касается твоих enum... насколько мне помнится, enum - это не стандартная
системная функция, ее тоже кто-то писал и ты пристегивал хедер.. в Java ты
тоже можешь пристегнуть че-нить (как ни странно :) )

-= Java developer =- D.Ale...@ftc.ru

Дмитрий Алентьев

unread,
Aug 14, 2000, 11:27:48 PM8/14/00
to

SD> Хорошо, играем дальше. Как ты себе представляешь на жабе конструкцию
SD> вида:

SD> void f(Color c)
SD> {
SD> switch (c) {
SD> case RED: { /* */ }
SD> case YELLOW: { /* */ }
SD> case GREEN: { /* */ }
SD> }
SD> }

а как ты представляешь на С (не на С++) полиморфизм ? :))
ты ведь вроде говорил про ООП, а теперь на классику переключился

Sergey P. Derevyago

unread,
Aug 15, 2000, 3:00:00 AM8/15/00
to
"Дмитрий Алентьев" wrote:
> SD> Хорошо, играем дальше. Как ты себе представляешь на жабе конструкцию
> SD> вида:
>
> SD> void f(Color c)
> SD> {
> SD> switch (c) {
> SD> case RED: { /* */ }
> SD> case YELLOW: { /* */ }
> SD> case GREEN: { /* */ }
> SD> }
> SD> }
>
> а как ты представляешь на С (не на С++) полиморфизм ? :))
В порядке ли у тебя с гм... логикой?

> ты ведь вроде говорил про ООП, а теперь на классику переключился

О! Т.е. ООП не нужны операторы switch?!

Sergey P. Derevyago

unread,
Aug 15, 2000, 3:00:00 AM8/15/00
to
"Дмитрий Алентьев" wrote:
> AC> И вообще, за несколько месяцов работы с java я понял, что это жутко
> AC> уродливая пародия на С++. Тоесть, я и раньше знал, что java тяненся от
> AC> С++, но не знал, что это сделанно на столько уродливо. Hа java нельзя
> AC> програмировать как полноценный ООП. В общем С++ форева, java маст дай
> AC> (это только мое мнение)!
Ну, тут он, конечно, крепко рубанул :)

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

Дорогой Дмитрий! Читал ли ты статьи "Why C++ isn't just an Object-Oriented
Programming Language" и "Why no single programming language can solve every
need" некоего B. Stroustrup? Если интересно, то можешь заглянуть на
http://www.research.att.com/~bs/papers.html
Так вот, С++ поддерживает _несколько_ парадигм программирования. ООП -- не
панацея.
Жаба же пытается поддержать только одну. А так как не смотря на весь
сопутствующий продвижению жабы обман даже дураку со временем становится
понятно, что Generic Programming -- это тоже _практически_ полезно, то в жабе
скоро появятся такие отвратительные и бесполезные шаблоны...
Вероятно и перегрузка операторов тоже ;)

Eugene Mironov

unread,
Aug 15, 2000, 3:00:00 AM8/15/00
to

ДА> Что касается твоих enum... насколько мне помнится, enum - это не
ДА> стандартная системная функция, ее тоже кто-то писал и ты пристегивал
ДА> хедер.. в Java ты тоже можешь пристегнуть че-нить (как ни странно :) )

Вообще-то, как справедливо заметил Страуструп, каждое объявление enum{}
является отдельным _типом_.
Кроме этого, в Java ничего никуда не пристегивается.

WBR, Eugene Mironov


Дмитрий Алентьев

unread,
Aug 15, 2000, 3:00:00 AM8/15/00
to
Tue Aug 15 2000 12:18, Eugene Mironov wrote to Дмитрий Алентьев:

EM> From: "Eugene Mironov" <aba...@nng.ru>

ДА>> Что касается твоих enum... насколько мне помнится, enum - это не
ДА>> стандартная системная функция, ее тоже кто-то писал и ты пристегивал
ДА>> хедер.. в Java ты тоже можешь пристегнуть че-нить (как ни странно :) )

EM> Вообще-то, как справедливо заметил Страуструп, каждое объявление enum{}
EM> является отдельным _типом_.
ну тогда все-равно не понятно каким боком она говорит об ООП-стве

EM> Кроме этого, в Java ничего никуда не пристегивается.
что же тогда делает "import" ?

Eugene Mironov

unread,
Aug 15, 2000, 3:00:00 AM8/15/00
to
ДА>>> Что касается твоих enum... насколько мне помнится, enum - это не
ДА>>> стандартная системная функция, ее тоже кто-то писал и ты пристегивал
ДА>>> хедер.. в Java ты тоже можешь пристегнуть че-нить (как ни странно :) )

EM>> Вообще-то, как справедливо заметил Страуструп, каждое объявление

EM>> enum{} является отдельным _типом_.

ДА> ну тогда все-равно не понятно каким боком она говорит об ООП-стве

Никаким, естественно.

EM>> Кроме этого, в Java ничего никуда не пристегивается.

ДА> что же тогда делает "import" ?

JLS
7.5.1 Single-Type-Import Declaration

A single-type-import declaration imports a single type by giving its fully
qualified name, making it available under a simple name in the class and
interface declarations of its compilation unit.

7.5.2 Type-Import-on-Demand Declaration

A type-import-on-demand declaration allows all public types declared in the
package named by a fully qualified name to be imported as needed.

Просто импорт полного имени, и ничего больше! Если в программах использовать
полные имена типов, то можно и вовсе обойтись без import.

WBR, Eugene Mironov


Дмитрий Алентьев

unread,
Aug 15, 2000, 10:36:02 PM8/15/00
to
EM>>> Кроме этого, в Java ничего никуда не пристегивается.

ДА>> что же тогда делает "import" ?

EM> JLS
EM> 7.5.1 Single-Type-Import Declaration

EM> A single-type-import declaration imports a single type by giving its
EM> fully qualified name, making it available under a simple name in the
~~~~~~~~~~~~~~~~~~~
EM> class and interface declarations of its compilation unit.
~~~~~~~~~~~~~~~~~~~~~~~
вот тут-то они и связываются
EM> 7.5.2 Type-Import-on-Demand Declaration

EM> A type-import-on-demand declaration allows all public types declared in
EM> the package named by a fully qualified name to be imported as needed.

EM> Просто импорт полного имени, и ничего больше! Если в программах
EM> использовать полные имена типов, то можно и вовсе обойтись без import.

Eugene Mironov

unread,
Aug 16, 2000, 12:15:42 AM8/16/00
to

EM>> A single-type-import declaration imports a single type by giving its
EM>> fully qualified name, making it available under a simple name in the

ДА> ~~~~~~~~~~~~~~~~~~~

EM>> class and interface declarations of its compilation unit.

ДА> ~~~~~~~~~~~~~~~~~~~~~~~
ДА> вот тут-то они и связываются

Если класса/интерфейса нет в CLASSPATH, то никакой import тебе не поможет
его "импортировать".
В то же время вместо

import java.util.Vector;

Vector v;

всегда можно написать

java.util.Vector v;

То есть import не тянет описание интерфейса!

WBR, Eugene Mironov

Sergey P. Derevyago

unread,
Aug 16, 2000, 3:00:00 AM8/16/00
to
Ты, Женя, тоже перегибаешь. Видя java.util.Vector компилятор не может не
загрузить соответствующий Vector.class. Если это не означает "тянуть описание
интерфейса (и реализации)", то что ты тогда имел ввиду?
0 new messages