Skip to main content

Re: AbstractQuantity's class

  • From: Otávio Gonçalves de Santana < >
  • To:
  • Subject: Re: AbstractQuantity's class
  • Date: Wed, 17 Sep 2014 05:23:10 -0300

If I hide the AbstractQuantity and expose the implementations?

On Wed, Sep 17, 2014 at 5:14 AM, Werner Keil 
< >
 wrote:

> Removing of() may work, but I believe a (visible) abstract base class (see
> Measure in ICU4J or similar ones in Android based frameworks like OpenXC)
> is necessary. Similar to the likes of AbstractMap or AbstractList in
> Collections API they provide a common ground for different concrete classes
> used by hundreds of different libraries not just in the JDK or JavaEE. It
> avoids a lot of unneccessary overhead and boilerplate code.
> Some types defined by a random library like Health, Energy, Science, etc.
> will be totally unknown to your SE factory implementation, using specific
> quantity types of their own. That's why abstract base classes provide help
> and guidance without forcing us or users to know every new class (we
> probably needed Reflection again to try btw. if a library wants to use
> factories, I hope you also don't forget about that?;-)
>
> I wished we could add something like it to the API level, but it seems to
> platform specific when it comes to concrete types.
>  Am 17.09.2014 09:24 schrieb "Otávio Gonçalves de Santana" <
>  >:
>
> Another proposal is, remove the factory methods in AbstractQuantity,
>> remove the public in the class and make it visibla just to the package, and
>> create the QuantityFactory:
>>
>> I saw some advantagens:
>>
>>
>>    - Hide the implementations
>>    - Just show the API
>>    - the client don't need know the implementation
>>    - Single responsability to factory - now one class will do that
>>    - the AbstractQuantity follows the SOLID principle
>>
>>
>> On Tue, Sep 16, 2014 at 3:55 AM, Werner Keil 
>> < >
>> wrote:
>>
>>> That's along the lines of similar ones in JDK or JavaMoney;-)
>>> Would you avoid the of() method in concrete classes to solve Otavio's
>>> Problem/question?
>>>
>>> As Anatole is at Hackergarten, we can probably offer him to join if he
>>> wants.
>>>
>>> Cheers,
>>> W
>>> Am 16.09.2014 08:07 schrieb "Jean-Marie Dautelle" 
>>> < >:
>>>
>>> Hello,
>>>> Quantities would not extends any class, its purpose is to provide
>>>> static factory method. Starting with Java 8, interface may have static
>>>> factory (but Java 8 it is not your target).
>>>> I would stay away from static factory method, except to get the
>>>> "quantity factory" (cf. unit of measurement 6.x api):
>>>>     MyQuantityFactory.getInstance().newQuantity("10 m");
>>>> Cheers,
>>>> JM
>>>>
>>>>
>>>> On Tue, Sep 16, 2014 at 12:37 AM, Werner Keil 
>>>> < >
>>>> wrote:
>>>>
>>>>> Sorry but it is not the answer to the question you askd, there is no
>>>>> practice (see JSR 354) like MonetaryAmounts.of() or Collections.of().
>>>>>
>>>>> Those are merely facade methods, a Quantities extends AbstractQuantity
>>>>> makes no sense, it is just wrong.
>>>>> Seems we probably need Hackergarten or the community to ask them for
>>>>> the right name. It certainly is not Quantities based on all other APIs.
>>>>>
>>>>> Beside, if we start putting such facades like Quantities into the RI,
>>>>> where does that leave the SPI elements or how wold it use them?
>>>>>
>>>>>
>>>>>
>>>>> On Tue, Sep 16, 2014 at 12:28 AM, Werner Keil 
>>>>> < >
>>>>> wrote:
>>>>>
>>>>>> What exactly should "Quantities" be, a facade like "MonetaryAmounts",
>>>>>> etc. from JavaMoney??
>>>>>>
>>>>>> If it was to replace BaseQuantity, that is not a name for a concrete
>>>>>> class I'm afraid. The TemporalAmount used in JSR 310 is actually a
>>>>>> TemporalAmounts (since it represents more than a single amount) but if 
>>>>>> we
>>>>>> had
>>>>>> Quantities extends AbstractQuantity or
>>>>>> Quantities implements Quantity??
>>>>>>
>>>>>>
>>>>>> java.util.Collections does not implement java.util.Collection either,
>>>>>> it is merely a facade, no need for an of() there[?]
>>>>>> So what you suggested would be a facade along the lines of what
>>>>>> Anatole mentioned, but it cannot replace AbstractQuantity.
>>>>>>
>>>>>> Class.of() returns an instance of that class, so a Quantities facade
>>>>>> could offer a method like
>>>>>>
>>>>>> Quantities.getQuantityFactory(), but it  can't extend or implement
>>>>>> Quantity, nor return a Quantity as such via of().
>>>>>>
>>>>>> Regards,
>>>>>> Werner
>>>>>>
>>>>>> On Mon, Sep 15, 2014 at 11:40 PM, Jean-Marie Dautelle <
>>>>>>  >
>>>>>>  wrote:
>>>>>>
>>>>>>> Hi All,
>>>>>>> Indeed, JScience use Amount but with a different semantics (using
>>>>>>> that same name would create for me a headache due to name clashing).
>>>>>>> It should be noted that Amount has to be a class (not an interface)
>>>>>>> in order to provide static factory method (Java 7).
>>>>>>> Usually (at least in JScience), you will have something like Amount
>>>>>>> (interface) and Amounts with terminating s for the class holding 
>>>>>>> static
>>>>>>> factory method to produce Amount instances.
>>>>>>> But since you intend to return Quantity types, I would suggest using
>>>>>>> Quantities.of(100d, SI.METRE) - That would be consistent with standard
>>>>>>> practices.
>>>>>>> Best regards,
>>>>>>> Jean-Marie.
>>>>>>>
>>>>>>>
>>>>>>> On Mon, Sep 15, 2014 at 9:51 PM, Werner Keil 
>>>>>>> < >
>>>>>>> wrote:
>>>>>>>
>>>>>>>> Dear Experts,
>>>>>>>>
>>>>>>>> If you don't see a conflict between a more general "Amount" class
>>>>>>>> here and other types in different value-oriented APIs like JSR 354, 
>>>>>>>> we may
>>>>>>>> take the inspiration by the likes of JScience or ICU4J, both using 
>>>>>>>> *Amount
>>>>>>>> for such types.
>>>>>>>>
>>>>>>>> ICU4J combines it with things like "Currency" in
>>>>>>>> http://icu-project.org/apiref/icu4j/com/ibm/icu/util/CurrencyAmount.html
>>>>>>>> the other concrete class is even called "TimeUnitAmount", but I
>>>>>>>> would not really see any of those as proper additions either.
>>>>>>>>
>>>>>>>> How do you intend to use the "faster" quantity sub-types, currently
>>>>>>>> all returned by factory methods in AbstractQuantity?
>>>>>>>> The "Amount" type like e.g. that in ICU4J (there it is named
>>>>>>>> Measure, but unlike JSR 363 it does not separate between API and
>>>>>>>> implementation, so everything are classes) holds a Number, so in 
>>>>>>>> theory
>>>>>>>> using different concrete number sub-classes would work for
>>>>>>>> Amount.of(100d, SI.METRE) as opposed to
>>>>>>>> Amount.of(BigDecimal.TEN, SI.METRE) could handle that all.
>>>>>>>>
>>>>>>>> What about alternate classes with a lower footprint, especially in
>>>>>>>> SE? Actually they might matter more, but if using objects like 
>>>>>>>> Double,
>>>>>>>> Integer or Long worked equally well under ME, we could and should 
>>>>>>>> keep that
>>>>>>>> in sync, with the exception of BigDecimal/BigInteger[?]
>>>>>>>>
>>>>>>>> Martin, others WDYT?
>>>>>>>>
>>>>>>>> Regards,
>>>>>>>> Werner
>>>>>>>>
>>>>>>>> On Mon, Sep 15, 2014 at 9:07 PM, Otávio Gonçalves de Santana <
>>>>>>>>  >
>>>>>>>>  wrote:
>>>>>>>>
>>>>>>>>> Amount.of() sounds good.
>>>>>>>>> On Sep 15, 2014 4:04 PM, "Legrand, Karen" 
>>>>>>>>> < >
>>>>>>>>> wrote:
>>>>>>>>>
>>>>>>>>>>  -1 for QuantityAmount.  It looks very odd to have two nouns
>>>>>>>>>> that are essentially synonyms together like that. I think it would 
>>>>>>>>>> be much
>>>>>>>>>> better to use either ‘Quantity’ or ‘Amount’ by itself.
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> *From:* Leonardo Lima 
>>>>>>>>>> [mailto: ]
>>>>>>>>>> *Sent:* Monday, September 15, 2014 10:44 AM
>>>>>>>>>> *To:* 
>>>>>>>>>> 
>>>>>>>>>> *Subject:* Re: AbstractQuantity's class
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> QuantityAmount sounds redundant, doesn't it?
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> On Sun, Sep 14, 2014 at 9:03 PM, Otávio Gonçalves de Santana <
>>>>>>>>>>  >
>>>>>>>>>>  wrote:
>>>>>>>>>>
>>>>>>>>>> Actually I would like to work this and in Lambda expressions.
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> Could be QuantityAmount then?
>>>>>>>>>>
>>>>>>>>>> anyone?
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> On Sun, Sep 14, 2014 at 6:06 PM, Werner Keil <
>>>>>>>>>>  >
>>>>>>>>>>  wrote:
>>>>>>>>>>
>>>>>>>>>> Since we drop the .org domain soon, I would not call that UOMo
>>>>>>>>>> (the Eclipse project certainly will keep the name, after all it 
>>>>>>>>>> also
>>>>>>>>>> support UCUM which has another .org domain, too)
>>>>>>>>>>
>>>>>>>>>> Why would Quantities get an of() method? What would be imaginable
>>>>>>>>>> is some sort of factory/facade in RI or SE, but except a
>>>>>>>>>> getInstance(Length.class) similar to the current QuantityFactory 
>>>>>>>>>> class
>>>>>>>>>> (it's a singleton returning exactly one instance here, see MEEP or 
>>>>>>>>>> CLDC8,
>>>>>>>>>> they also use both of() and getInstance() for each purpose, just 
>>>>>>>>>> like Josh
>>>>>>>>>> Bloch explained) there is nothing to be of() in this case.
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> QuantityAmount sounds like a good alternative of these, let's see
>>>>>>>>>> at JavaOne, probably in Hackergarten what's best.
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> On Sun, Sep 14, 2014 at 9:01 PM, Otávio Gonçalves de Santana <
>>>>>>>>>>  >
>>>>>>>>>>  wrote:
>>>>>>>>>>
>>>>>>>>>> I am not referring if the classe be or not be abstract or design,
>>>>>>>>>> but just the name, I am talking about the nomenclature.
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> Could be a good name:
>>>>>>>>>>
>>>>>>>>>>    - UOMO.of(...)
>>>>>>>>>>
>>>>>>>>>>  another one is:
>>>>>>>>>>
>>>>>>>>>>    - Quantities.of(...)
>>>>>>>>>>
>>>>>>>>>>  or the classic:
>>>>>>>>>>
>>>>>>>>>>    - QuantityAmount.of(...)
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> On Sun, Sep 14, 2014 at 2:51 PM, Werner Keil <
>>>>>>>>>>  >
>>>>>>>>>>  wrote:
>>>>>>>>>>
>>>>>>>>>> Sorry, no more Measurable, please
>>>>>>>>>>
>>>>>>>>>> We've been there once.
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> You bet Spring was probably created a while ago and may not
>>>>>>>>>> follow all patterns we may see now
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> Something else e.g. QuantityAmount<Q extends Quantity> extends
>>>>>>>>>> AbstractQuantity<Q> is worth considering, like in UOMo.
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> And the subsequent of() methods may be on such a concrete class.
>>>>>>>>>>
>>>>>>>>>> If you look at let's say the Collections API, it shows a similar
>>>>>>>>>> pattern of
>>>>>>>>>>
>>>>>>>>>> Interface > AbstractBaseClass > ConcreteClass.
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> This "author" may not have done everything consistently there,
>>>>>>>>>> see EnumSet, but other than that it is still a better piece of API 
>>>>>>>>>> than
>>>>>>>>>> let's say 310 with hundreds of methods on final classes that are 
>>>>>>>>>> largely
>>>>>>>>>> incompatible and a TemporalAmount which actually should be called
>>>>>>>>>> TemporalAmounts, TemporalAmountCollection or whatever
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> On Sun, Sep 14, 2014 at 8:32 AM, Werner Keil <
>>>>>>>>>>  >
>>>>>>>>>>  wrote:
>>>>>>>>>>
>>>>>>>>>> Sorry but we had that confusion with JSR 275, so ONE Measurement
>>>>>>>>>> is enough, we must not have Measure implements Measurement, that 
>>>>>>>>>> would just
>>>>>>>>>> be a mess.
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> JScience called that "Amount", but you see a lot of very popular
>>>>>>>>>> projects (SpringFramework) doing exactly the same. There are
>>>>>>>>>> Abstract*.valueOf() or similar constructions.
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> Regards,
>>>>>>>>>>
>>>>>>>>>> Werner
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>   Werner Keil | JCP Executive Committee Member, JSR 363 Co Spec
>>>>>>>>>> Lead | Eclipse UOMo Lead, Babel Language Champion | Apache
>>>>>>>>>> Committer | Java Godfather
>>>>>>>>>>
>>>>>>>>>> Twitter @wernerkeil | @UnitAPI | @JSR354 | #EclipseUOMo | 
>>>>>>>>>> #Java_Social
>>>>>>>>>> | #DevOps
>>>>>>>>>>
>>>>>>>>>> Skype werner.keil | Google+ gplus.to/wernerkeil
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> * JavaZone 2014: 9-11 Sep 2014, Oslo, Norway. Werner Keil, JCP EC
>>>>>>>>>> Member, JSR 363 Spec Lead will present "JSR 363 - The Answer to
>>>>>>>>>> Life Science and the Internet of Everything"
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> * JavaOne 2014: Sep 30, San Francisco, USA, Werner Keil, JCP EC
>>>>>>>>>> Member, JSR 354 EG Member will host "Java and Digital Currencies, 
>>>>>>>>>> Friend or
>>>>>>>>>> FOE"
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> * JMaghreb 3.0: 4-6 Nov 2014, Casablanca, Morocco. Werner Keil,
>>>>>>>>>> JCP EC Member, JSR 363 Spec Lead, DevOps Guy will present
>>>>>>>>>> "Triple-E' class DevOps", "JSR 363"
>>>>>>>>>>
>>>>>>>>>> * ApacheCon Europe: 17 Nov 2014, Budapest, Hungary. Werner Keil,
>>>>>>>>>> JCP EC Member, Apache DeviceMap Committer will present "Apache
>>>>>>>>>> DeviceMap"
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> * Mobile Developer Conference kompakt: 18 Nov 2014, Hamburg,
>>>>>>>>>> Germany. Werner Keil, JCP EC Member, Apache DeviceMap Committer 
>>>>>>>>>> will
>>>>>>>>>> present "Apache DeviceMap" (GER)
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> On Sun, Sep 14, 2014 at 12:29 PM, Otávio Gonçalves de Santana <
>>>>>>>>>>  >
>>>>>>>>>>  wrote:
>>>>>>>>>>
>>>>>>>>>> Hi Guys.
>>>>>>>>>>
>>>>>>>>>> How is going?
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> I believe we have a possible problem with nomeclature in
>>>>>>>>>>  AbstractQuantity's class, looking this example:
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> Quantity<Length> metre = AbstractQuantity.of(10, SI.METRE);
>>>>>>>>>>
>>>>>>>>>> Quantity<Length> foot =  metre.to(US.FOOT);
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> IMHO, Abstract* is not a good name to a factory, maybe just
>>>>>>>>>> Measure, so will:
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> Quantity<Length> metre = Meansure.of(10, SI.METRE);
>>>>>>>>>>
>>>>>>>>>> Quantity<Length> foot =  metre.to(US.FOOT);
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> WDYF?
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> --
>>>>>>>>>>
>>>>>>>>>> Otávio Gonçalves de Santana
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> blog:     http://otaviosantana.blogspot.com.br/
>>>>>>>>>>
>>>>>>>>>> twitter: http://twitter.com/otaviojava
>>>>>>>>>>
>>>>>>>>>> site:     *http://about.me/otaviojava
>>>>>>>>>> <http://about.me/otaviojava>*
>>>>>>>>>>
>>>>>>>>>> 55 (11) 98255-3513
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> --
>>>>>>>>>>
>>>>>>>>>> Otávio Gonçalves de Santana
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> blog:     http://otaviosantana.blogspot.com.br/
>>>>>>>>>>
>>>>>>>>>> twitter: http://twitter.com/otaviojava
>>>>>>>>>>
>>>>>>>>>> site:     *http://about.me/otaviojava
>>>>>>>>>> <http://about.me/otaviojava>*
>>>>>>>>>>
>>>>>>>>>> 55 (11) 98255-3513
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> --
>>>>>>>>>>
>>>>>>>>>> Otávio Gonçalves de Santana
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> blog:     http://otaviosantana.blogspot.com.br/
>>>>>>>>>>
>>>>>>>>>> twitter: http://twitter.com/otaviojava
>>>>>>>>>>
>>>>>>>>>> site:     *http://about.me/otaviojava
>>>>>>>>>> <http://about.me/otaviojava>*
>>>>>>>>>>
>>>>>>>>>> 55 (11) 98255-3513
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> --
>>>>>>>>>>
>>>>>>>>>> Otávio Gonçalves de Santana
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> blog:     http://otaviosantana.blogspot.com.br/
>>>>>>>>>>
>>>>>>>>>> twitter: http://twitter.com/otaviojava
>>>>>>>>>>
>>>>>>>>>> site:     *http://about.me/otaviojava
>>>>>>>>>> <http://about.me/otaviojava>*
>>>>>>>>>>
>>>>>>>>>> 55 (11) 98255-3513
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>
>>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> --
>>>>>>> It is not the strongest of the species that survives, nor the most
>>>>>>> intelligent. It is the one that is most adaptable to change. - 
>>>>>>> Darwin's
>>>>>>> Origin of Species (digest)
>>>>>>>
>>>>>>
>>>>>>
>>>>>
>>>>
>>>>
>>>> --
>>>> It is not the strongest of the species that survives, nor the most
>>>> intelligent. It is the one that is most adaptable to change. - Darwin's
>>>> Origin of Species (digest)
>>>>
>>>
>>
>>
>> --
>> Otávio Gonçalves de Santana
>>
>> blog:     http://otaviosantana.blogspot.com.br/
>> twitter: http://twitter.com/otaviojava
>> site:     *http://about.me/otaviojava ;<http://about.me/otaviojava>*
>> 55 (11) 98255-3513
>>
>>


-- 
Otávio Gonçalves de Santana

blog:     http://otaviosantana.blogspot.com.br/
twitter: http://twitter.com/otaviojava
site:     *http://about.me/otaviojava ;<http://about.me/otaviojava>*
55 (11) 98255-3513

GIF image

GIF image

GIF image

GIF image

GIF image



Re: AbstractQuantity's class

(continued)

Re: AbstractQuantity's class

Otávio Gonçalves de Santana 09/15/2014

Re: AbstractQuantity's class

Werner Keil 09/15/2014

Re: AbstractQuantity's class

Jean-Marie Dautelle 09/15/2014

Re: AbstractQuantity's class

Otávio Gonçalves de Santana 09/15/2014

Re: AbstractQuantity's class

Werner Keil 09/15/2014

Re: AbstractQuantity's class

Werner Keil 09/15/2014

Re: AbstractQuantity's class

Jean-Marie Dautelle 09/16/2014

Re: AbstractQuantity's class

Werner Keil 09/16/2014

Re: AbstractQuantity's class

Otávio Gonçalves de Santana 09/17/2014

Re: AbstractQuantity's class

Werner Keil 09/17/2014

Re: AbstractQuantity's class

Otávio Gonçalves de Santana 09/17/2014

Re: AbstractQuantity's class

Werner Keil 09/17/2014

Re: AbstractQuantity's class

Werner Keil 09/17/2014

Re: AbstractQuantity's class

Otávio Gonçalves de Santana 09/17/2014
 
 
Close
loading
Please Confirm
Close