🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: nl.comp.programmeren
22 messages
22 total messages Started by Passero Wed, 26 Jan 2005 16:01
[java] overerving vraagje
#335
Author: Passero
Date: Wed, 26 Jan 2005 16:01
6 lines
1470 bytes
IK heb een abstracte klasse die een aantal dingen doet en nu wil ik dat 
de klassen die daarvan erven die methoden ook kunnen gebruiken maar als 
ik ze public zet dan kunnen de andere klassen die ook gebruiken en dat 
wil ik niet. Protected is ook geen oplossing want er zijn andere klassen 
in het package die niet erven van die ene abstracte klasse.
Is dit te doen in java of moet ik het via een omweg doen?
Re: [java] overerving vraagje
#336
Author: Joost Kraaijeveld
Date: Wed, 26 Jan 2005 16:10
12 lines
1484 bytes
Passero wrote:
> IK heb een abstracte klasse die een aantal dingen doet en nu wil ik dat 
> de klassen die daarvan erven die methoden ook kunnen gebruiken maar als 
> ik ze public zet dan kunnen de andere klassen die ook gebruiken en dat 
> wil ik niet. Protected is ook geen oplossing want er zijn andere klassen 
> in het package die niet erven van die ene abstracte klasse.
> Is dit te doen in java of moet ik het via een omweg doen?
Tegen wie of wat moet je die klassen beschermen?

Groeten

Joost
Re: [java] overerving vraagje
#337
Author: Edwin Martin
Date: Wed, 26 Jan 2005 17:30
28 lines
2081 bytes
Passero wrote:
> IK heb een abstracte klasse die een aantal dingen doet

Een abstracte klasse doet per definitie geen "dingen".

> en nu wil ik dat 
> de klassen die daarvan erven die methoden ook kunnen gebruiken maar als 
> ik ze public zet dan kunnen de andere klassen die ook gebruiken en dat 
> wil ik niet.

Methoden van een abstracte klasse kunnen niet worden aangeroepen.

> Protected is ook geen oplossing want er zijn andere klassen 
> in het package die niet erven van die ene abstracte klasse.
> Is dit te doen in java of moet ik het via een omweg doen?

Zo te horen wil je geen abstracte klasse, maar een gewone klasse. Alleen 
wil je niet dat je deze kunt instantieren.

Dat doe je niet door 'm abstract te maken. Er is een truuk om te zorgen 
dat je een klasse niet kunt instantieren: namelijk door de contructor 
private te maken.

Groeten,
Edwin Martin

-- 
http://www.bitstorm.org/
Re: [java] overerving vraagje
#338
Author: Passero
Date: Wed, 26 Jan 2005 17:46
24 lines
2189 bytes
Edwin Martin schreef:

> 
> 
> Zo te horen wil je geen abstracte klasse, maar een gewone klasse. Alleen 
> wil je niet dat je deze kunt instantieren.
> 

Het zit eigenlijk zo: ik heb een aantal klassen die ongeveer hetzelfde 
doen. Ze moeten een interface hebben naar de buitenwereld toe. Dus een 
aantal methoden die MOETEN ge�mplementeerd worden. Dan zijn er nog een 
aantal methoden die door de abstracte klasse zijn ge�mplementeerd maar 
als ik die private zet, dan kunnen de klassen die erver ook niet meer 
aan die methoden en ze hebben die juist wel nodig. Het is de bedoeling 
dat enkel de klassen die erven van de abstracte klassen die methoden 
kunnen gebruiken. Het is dus niet echt public dat ze mogen zijn.

> Dat doe je niet door 'm abstract te maken. Er is een truuk om te zorgen 
> dat je een klasse niet kunt instantieren: namelijk door de contructor 
> private te maken.
> 
> Groeten,
> Edwin Martin
> 
Re: [java] overerving vraagje
#340
Author: Gerrit Cornelis
Date: Wed, 26 Jan 2005 18:11
40 lines
2485 bytes
"Edwin Martin" <e.j.martin@chello.nl> wrote in message
news:TsQJd.21247$PH1.15924@amsnews05.chello.com...
> Passero wrote:
> > IK heb een abstracte klasse die een aantal dingen doet
>
> Een abstracte klasse doet per definitie geen "dingen".
>
waarom zou je er dan maken?

> > en nu wil ik dat
> > de klassen die daarvan erven die methoden ook kunnen gebruiken maar als
> > ik ze public zet dan kunnen de andere klassen die ook gebruiken en dat
> > wil ik niet.
>
> Methoden van een abstracte klasse kunnen niet worden aangeroepen.

dus je kan geen methoden op een abstracte klasse zetten?

>
> > Protected is ook geen oplossing want er zijn andere klassen
> > in het package die niet erven van die ene abstracte klasse.
> > Is dit te doen in java of moet ik het via een omweg doen?
>
> Zo te horen wil je geen abstracte klasse, maar een gewone klasse. Alleen
> wil je niet dat je deze kunt instantieren.
>
> Dat doe je niet door 'm abstract te maken. Er is een truuk om te zorgen
> dat je een klasse niet kunt instantieren: namelijk door de contructor
> private te maken.

een andere goede truk is hem abstract te declareren. wedden dat je compiler
ook klaagt.
http://java.sun.com/docs/books/tutorial/java/javaOO/classdecl.html (kijk
even wat abstract betekent, is trouwens wel meer zo in class-based oop
talen)

nu vraag ik me toch wel af wat jij onder een abstracte klasse verstaat.

gC
Re: [java] overerving vraagje
#341
Author: Gerrit Cornelis
Date: Wed, 26 Jan 2005 18:16
17 lines
1988 bytes
"Passero" <bla@bla.bla> wrote in message
news:29PJd.5609$U95.109676@phobos.telenet-ops.be...
> IK heb een abstracte klasse die een aantal dingen doet en nu wil ik dat
> de klassen die daarvan erven die methoden ook kunnen gebruiken maar als
> ik ze public zet dan kunnen de andere klassen die ook gebruiken en dat
> wil ik niet. Protected is ook geen oplossing want er zijn andere klassen
> in het package die niet erven van die ene abstracte klasse.
> Is dit te doen in java of moet ik het via een omweg doen?

maak je package enkel voor de klassen die er wel aanmogen en gooi de andere
klassen in een andere package.
Toen ik nog met Java "werkte" was er zo iets als private protected,
http://java.sun.com/docs/books/tutorial/java/javaOO/accesscontrol.html, dat
dit deed (denk ik). Soit, nu is het niet meer mogelijk.

gC
Re: [java] overerving vraagje
#346
Author: John Bokma
Date: Wed, 26 Jan 2005 19:29
33 lines
2107 bytes
Edwin Martin wrote:

> Passero wrote:
>> IK heb een abstracte klasse die een aantal dingen doet
> 
> Een abstracte klasse doet per definitie geen "dingen".

" Unlike interfaces, abstract classes may implement some of the methods.
Though you can't instantiate an abstract class, you can invoke its
static methods." http://mindprod.com/jgloss/abstractclass.html

Ik meen mij ook te herinneren dat een class met minstens 1 abstracte
method abstact was, dus dat abstract in de class signature (?) overbodig
is. 

Hmmm: http://java.about.com/cs/javadocumentation/g/abstractclass.htm

Mijn geheugen is zo slecht nog niet, lijkt het.

>> en nu wil ik dat 
>> de klassen die daarvan erven die methoden ook kunnen gebruiken maar
>> als ik ze public zet dan kunnen de andere klassen die ook gebruiken
>> en dat wil ik niet.
> 
> Methoden van een abstracte klasse kunnen niet worden aangeroepen.

Dus wel, zie boven.

-- 
John Bokma
                 Voorbeeldscripts in Perl: http://johnbokma.com/perl/
Ervaren Perl / Java programmeur beschikbaar:  http://castleamber.com/
Tevreden opdrachtgevers:     http://castleamber.com/testimonials.html
Re: [java] overerving vraagje
#348
Author: John Bokma
Date: Wed, 26 Jan 2005 19:31
23 lines
2053 bytes
Passero wrote:

> Edwin Martin schreef:
> 
>> Zo te horen wil je geen abstracte klasse, maar een gewone klasse.
>> Alleen wil je niet dat je deze kunt instantieren.
> 
> Het zit eigenlijk zo: ik heb een aantal klassen die ongeveer hetzelfde
> doen. Ze moeten een interface hebben naar de buitenwereld toe. Dus een
> aantal methoden die MOETEN ge�mplementeerd worden. Dan zijn er nog een
> aantal methoden die door de abstracte klasse zijn ge�mplementeerd maar
> als ik die private zet, dan kunnen de klassen die erver ook niet meer 
> aan die methoden en ze hebben die juist wel nodig. Het is de bedoeling
> dat enkel de klassen die erven van de abstracte klassen die methoden 
> kunnen gebruiken. Het is dus niet echt public dat ze mogen zijn.

protected class? (Ik gok maar wat :-D)

-- 
John Bokma
                 Voorbeeldscripts in Perl: http://johnbokma.com/perl/
Ervaren Perl / Java programmeur beschikbaar:  http://castleamber.com/
Tevreden opdrachtgevers:     http://castleamber.com/testimonials.html
Re: [java] overerving vraagje
#349
Author: John Bokma
Date: Wed, 26 Jan 2005 19:32
13 lines
1466 bytes
Gerrit Cornelis wrote:

> Toen ik nog met Java "werkte" was er zo iets als private protected,
> http://java.sun.com/docs/books/tutorial/java/javaOO/accesscontrol.html,
> dat dit deed (denk ik). Soit, nu is het niet meer mogelijk.

Omdat niemand het begreep :-D (of zoiets).

-- 
John Bokma
                 Voorbeeldscripts in Perl: http://johnbokma.com/perl/
Ervaren Perl / Java programmeur beschikbaar:  http://castleamber.com/
Tevreden opdrachtgevers:     http://castleamber.com/testimonials.html
Re: [java] overerving vraagje
#350
Author: Jaap Beetstra
Date: Wed, 26 Jan 2005 20:00
12 lines
1693 bytes
John Bokma wrote:
> Ik meen mij ook te herinneren dat een class met minstens 1 abstracte
> method abstact was, dus dat abstract in de class signature (?)
> overbodig is.

Een class met een abstracte methode _moet_ juist abstract in de class 
signature hebben staan.
Een class zonder abstracte methoden _mag_ abstract in de class signature 
hebben staan. Een class kan dus abstract zijn, zelfs al heeft deze geen 
abstracte methoden.

Groet, Jaap 
Re: [java] overerving vraagje
#238
Author: Edwin Martin
Date: Wed, 26 Jan 2005 21:51
16 lines
1641 bytes
Gerrit Cornelis wrote:

> nu vraag ik me toch wel af wat jij onder een abstracte klasse verstaat.

Okee, ik dacht dat een abstracte klasse alleen abstracte methods kon 
bevatten.

Maar om de vermaarde Joshua Bloch te citeren: "Attempting to enforce 
noninstantiability by making a class abstract does not work."

De conclusie blijft dus dezelfde.

Edwin Martin.

-- 
http://www.bitstorm.org/
Re: [java] overerving vraagje
#242
Author: Edwin Martin
Date: Wed, 26 Jan 2005 22:27
51 lines
2588 bytes
Passero wrote:

> Het zit eigenlijk zo: ik heb een aantal klassen die ongeveer hetzelfde 
> doen. Ze moeten een interface hebben naar de buitenwereld toe. Dus een 
> aantal methoden die MOETEN geïmplementeerd worden. Dan zijn er nog een 
> aantal methoden die door de abstracte klasse zijn geïmplementeerd maar 
> als ik die private zet, dan kunnen de klassen die erver ook niet meer 
> aan die methoden en ze hebben die juist wel nodig. Het is de bedoeling 
> dat enkel de klassen die erven van de abstracte klassen die methoden 
> kunnen gebruiken. Het is dus niet echt public dat ze mogen zijn.

Helaas kent Java geen modifier om methods alleen zichtbaar te laten zijn 
in de huidige klasse en afgeleide klassen (ik geloof dat protected dat 
in C++ doet).

Ik kan maar een oplossing bedenken:

public class F {
	private F() {
		// Kan geen instantie van deze klasse maken
	}
	public void bewerking_afgeschermd() {
		//...
	}
}

public class F1 extends F {
	public void bewerking() {
		//...
		// Gebruik bewerking_afgeschermd()
		super.bewerking_afgeschermd();
		//...
	}
	
	public void bewerking_afgeschermd() {
		throw new NoSuchMethodException();
	}
}

Groeten,
Edwin Martin


-- 
http://www.bitstorm.org/
Re: [java] overerving vraagje
#248
Author: John Bokma
Date: Wed, 26 Jan 2005 23:04
32 lines
2168 bytes
Jaap Beetstra wrote:

> John Bokma wrote:
>> Ik meen mij ook te herinneren dat een class met minstens 1 abstracte
>> method abstact was, dus dat abstract in de class signature (?)
>> overbodig is.
> 
> Een class met een abstracte methode _moet_ juist abstract in de class 
> signature hebben staan.

Snap ik niet, zodra er 1 method abstract is, is het toch duidelijk dat de 
class alleen maar abstract kan zijn?

> Een class zonder abstracte methoden _mag_ abstract in de class signature 
> hebben staan.

Uiteraard, anders zou elke class abstract moeten zijn.

> Een class kan dus abstract zijn, zelfs al heeft deze geen 
> abstracte methoden.

En dat sluit niet uit dat een class met 1 abstracte method per definitie 
abstract is, en dus abstract overbodig is om te vermelden.

Maar een snelle test is het met je eens, als een method abstract is, moet 
je de class ook abstract maken.

-- 
John Bokma
                 Voorbeeldscripts in Perl: http://johnbokma.com/perl/
Ervaren Perl / Java programmeur beschikbaar:  http://castleamber.com/
Tevreden opdrachtgevers:     http://castleamber.com/testimonials.html
Re: [java] overerving vraagje
#256
Author: Gerrit Cornelis
Date: Thu, 27 Jan 2005 08:51
15 lines
1787 bytes
"Edwin Martin" <e.j.martin@chello.nl> wrote in message
news:jhUJd.9434$Pj6.1589@amsnews02.chello.com...
>

> Maar om de vermaarde Joshua Bloch te citeren: "Attempting to enforce
> noninstantiability by making a class abstract does not work."

enig idee waarom die mens dat beweerd? ik vind enkel de inhoudstabel van
zijn boek. de meeste andere puntjes in die tabel zijn redelijk voor de hand
liggend. Maar dit is en blijft een bizar statement aangezien er een speciale
taal construct voor voorzien is zou er geen reden mogen zijn om terug te
vallen op truc.

gC
Re: [java] overerving vraagje
#270
Author: Jaap Beetstra
Date: Thu, 27 Jan 2005 20:40
23 lines
2213 bytes
John Bokma wrote:
> Jaap Beetstra wrote:

>> Een class met een abstracte methode _moet_ juist abstract in de class
>> signature hebben staan.
>
> Snap ik niet, zodra er 1 method abstract is, is het toch duidelijk
> dat de class alleen maar abstract kan zijn?

Ja, in zekere zin is het dubbele informatie dat je een class met abstracte 
methoden ook nog eens zelf declareert als abstract. Maar omdat een class 
zonder abstracte methoden ook abstract kan zijn, vind ik het wel consequent 
om (ook al is het afleidbaar) de class zelf ook als abstract te declareren.

>> Een class zonder abstracte methoden _mag_ abstract in de class
>> signature hebben staan.
>
> Uiteraard, anders zou elke class abstract moeten zijn.

Ik bedoel het omgekeerde, dat een class niet perse concreet is als deze geen 
abstracte (maar alleen concrete) methoden bevat.

Groet, Jaap 
Re: [java] overerving vraagje
#277
Author: Edwin Martin
Date: Thu, 27 Jan 2005 23:53
20 lines
2080 bytes
Gerrit Cornelis wrote:

>>Maar om de vermaarde Joshua Bloch te citeren: "Attempting to enforce
>>noninstantiability by making a class abstract does not work."
> 
> enig idee waarom die mens dat beweerd? ik vind enkel de inhoudstabel van
> zijn boek. de meeste andere puntjes in die tabel zijn redelijk voor de hand
> liggend. Maar dit is en blijft een bizar statement aangezien er een speciale
> taal construct voor voorzien is zou er geen reden mogen zijn om terug te
> vallen op truc.

"The class can be subclassed and the subclass instantiated. Furthermore, 
  it misleads the user into thinking the class was designed for 
inheritance".

Edwin


-- 
http://www.bitstorm.org/
Re: [java] overerving vraagje
#199
Author: Stefan Arentz
Date: Fri, 28 Jan 2005 15:59
26 lines
2452 bytes
Edwin Martin <e.j.martin@chello.nl> writes:

> Gerrit Cornelis wrote:
> 
> >>Maar om de vermaarde Joshua Bloch te citeren: "Attempting to enforce
> >>noninstantiability by making a class abstract does not work."
> > enig idee waarom die mens dat beweerd? ik vind enkel de inhoudstabel
> > van
> > zijn boek. de meeste andere puntjes in die tabel zijn redelijk voor de hand
> > liggend. Maar dit is en blijft een bizar statement aangezien er een speciale
> > taal construct voor voorzien is zou er geen reden mogen zijn om terug te
> > vallen op truc.
> 
> "The class can be subclassed and the subclass
> instantiated. Furthermore, it misleads the user into thinking the
> class was designed for inheritance".

Wat een flauwekul. In Java, waar deze thread over gaat, is het maken van een
abstracte class een hele normale actie als je een componentn maakt dat 'net
niet af is'. Dus waarbij de subclass de missende functionaliteit moeten
implementeren.

Die abstracte class is ook helemaal niet te instantieren, zelfs niet na het
subclassen, de class blijft abstract en de compiler en runtime weten dat.

 S.
Re: [java] overerving vraagje
#200
Author: Gerrit Cornelis
Date: Fri, 28 Jan 2005 16:22
28 lines
2390 bytes
"Stefan Arentz" <stefan.arentz@gmail.com> wrote in message
news:87fz0lbl4q.fsf@keizer.soze.com...
> Edwin Martin <e.j.martin@chello.nl> writes:
>
> >
> > "The class can be subclassed and the subclass
> > instantiated. Furthermore, it misleads the user into thinking the
> > class was designed for inheritance".
>
> Wat een flauwekul. In Java, waar deze thread over gaat, is het maken van
een
> abstracte class een hele normale actie als je een componentn maakt dat
'net
> niet af is'. Dus waarbij de subclass de missende functionaliteit moeten
> implementeren.
>
> Die abstracte class is ook helemaal niet te instantieren, zelfs niet na
het
> subclassen, de class blijft abstract en de compiler en runtime weten dat.
>
Helemaal flauwekul is het niet. Joshua heeft blijkbaar een nood aan klassen
die niet gesubclassed mogen worden en die niet geinstantieerd mogen worden.
Dat zijn inderdaad geen abstracte klassen. Geen idee waarom iemand zulke
klassen zou willen (want eigenlijk val je dan gewoon terug op procedureel
programmeren) maar alla...de mens moet zijn boek met iets vullen natuurlijk.

gC
Re: [java] overerving vraagje
#202
Author: Stefan Arentz
Date: Fri, 28 Jan 2005 17:12
36 lines
2840 bytes
"Gerrit Cornelis" <gerrit_*remove*cornelis@belgacom.net> writes:

> "Stefan Arentz" <stefan.arentz@gmail.com> wrote in message
> news:87fz0lbl4q.fsf@keizer.soze.com...
> > Edwin Martin <e.j.martin@chello.nl> writes:
> >
> > >
> > > "The class can be subclassed and the subclass
> > > instantiated. Furthermore, it misleads the user into thinking the
> > > class was designed for inheritance".
> >
> > Wat een flauwekul. In Java, waar deze thread over gaat, is het maken van
> een
> > abstracte class een hele normale actie als je een componentn maakt dat
> 'net
> > niet af is'. Dus waarbij de subclass de missende functionaliteit moeten
> > implementeren.
> >
> > Die abstracte class is ook helemaal niet te instantieren, zelfs niet na
> het
> > subclassen, de class blijft abstract en de compiler en runtime weten dat.
> >
> Helemaal flauwekul is het niet. Joshua heeft blijkbaar een nood aan klassen
> die niet gesubclassed mogen worden en die niet geinstantieerd mogen worden.
> Dat zijn inderdaad geen abstracte klassen. Geen idee waarom iemand zulke
> klassen zou willen (want eigenlijk val je dan gewoon terug op procedureel
> programmeren) maar alla...de mens moet zijn boek met iets vullen natuurlijk.

Als je dat wil refactoren: een class die je niet mag instantieren en niet
subclassen die kan je zo uit je Java project donderden.

Wellicht is er een C++ reden, maar ik ken het boek en de auteur niet
heel goed. Ik hou me ook niet vast aan rare regeltjes waar academici
boeken mee vol schrijven moet ik bekennen.

 S.
Re: [java] overerving vraagje
#203
Author: Sjoerd A. Schreuder
Date: Fri, 28 Jan 2005 17:43
33 lines
3032 bytes
Stefan Arentz wrote:
> "Gerrit Cornelis" <gerrit_*remove*cornelis@belgacom.net> writes:
[knip]
>>Helemaal flauwekul is het niet. Joshua heeft blijkbaar een nood aan klassen
>>die niet gesubclassed mogen worden en die niet geinstantieerd mogen worden.
>>Dat zijn inderdaad geen abstracte klassen. Geen idee waarom iemand zulke
>>klassen zou willen (want eigenlijk val je dan gewoon terug op procedureel
>>programmeren) maar alla...de mens moet zijn boek met iets vullen natuurlijk.
> 
> Als je dat wil refactoren: een class die je niet mag instantieren en niet
> subclassen die kan je zo uit je Java project donderden.

Niet te snel: Misschien zijn er static methoden?

Maar abstract methoden en niet-statics in zo'n klasse kunnen inderdaad
gewoon weggegooid worden. En als je dan een lege klasse overhoud kan
de klasse zelf natuurlijk ook weg.

> Wellicht is er een C++ reden, maar ik ken het boek en de auteur niet
> heel goed. Ik hou me ook niet vast aan rare regeltjes waar academici
> boeken mee vol schrijven moet ik bekennen.

Ik zou geen C++ reden kunnen verzinnen voor een abstracte klasse die
niet gesubclasst kan worden gebruikt. Helemaal al omdat C++ functies
buiten een klasse toestaat en dus geen Math-achtige classen hoeft
te definieren.

Misschien heeft de auteur over het hoofd gezien dat je door alle
constructors private te maken ook kunt voorkomen dat er ooit nog
een instantie van die klasse komt? Of denk ik nu weer te veel in C++
en kan er in Java wel om zo'n private heen worden geprogrammeerd?

Sjoerd
Re: [java] overerving vraagje
#207
Author: Edwin Martin
Date: Sat, 29 Jan 2005 00:05
16 lines
2017 bytes
Sjoerd A. Schreuder wrote:

> Misschien heeft de auteur over het hoofd gezien dat je door alle
> constructors private te maken ook kunt voorkomen dat er ooit nog
> een instantie van die klasse komt? Of denk ik nu weer te veel in C++
> en kan er in Java wel om zo'n private heen worden geprogrammeerd?

Haha,

Dat is precies wat de auteur als oplossing geeft en waar ik mijn 
bijdrage aan deze draad mee begon.

Edwin Martin

-- 
http://www.bitstorm.org/
Re: [java] overerving vraagje
#208
Author: Edwin Martin
Date: Sat, 29 Jan 2005 00:11
24 lines
2241 bytes
Stefan Arentz wrote:

>>"The class can be subclassed and the subclass
>>instantiated. Furthermore, it misleads the user into thinking the
>>class was designed for inheritance".
> 
> 
> Wat een flauwekul. In Java, waar deze thread over gaat, is het maken van een
> abstracte class een hele normale actie als je een componentn maakt dat 'net
> niet af is'. Dus waarbij de subclass de missende functionaliteit moeten
> implementeren.

Dit wordt ook helemaal niet ontkend.

> Die abstracte class is ook helemaal niet te instantieren, zelfs niet na het
> subclassen, de class blijft abstract en de compiler en runtime weten dat.

Hij heeft het duidelijk over het instantieren van een subklasse van een 
abstracte klasse.

Edwin Martin

-- 
http://www.bitstorm.org/
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads