can programming be liberated from the two level style
play

Can Programming be Liberated from the Two-Level Style? by Thomas - PowerPoint PPT Presentation

Can Programming be Liberated from the Two-Level Style? by Thomas Khne and Daniel Schreiber presented at OOPSLA'07 Software Engineering Seminar Reto Mock, 24.03.2009 Motivation 3 (or even more) levels of ontological classification


  1. Can Programming be Liberated from the Two-Level Style? by Thomas Kühne and Daniel Schreiber presented at OOPSLA'07 Software Engineering Seminar Reto Mock, 24.03.2009

  2. Motivation ● 3 (or even more) levels of ontological classification ● only 2 levels supported by OO model: classes and objects ● what do we do? 2

  3. Super vs Meta ● '2001: A Space Odyssey' is an instance of a DVD ● but DVD is a specialisation of Product ª subset ( ½ ) ● whereas a DVD is an instance of a ProductType ª elementhood ( ∊ ) 3

  4. Workarounds ● Item Description Pattern 4

  5. 5

  6. Problems ● inheritance has to be emulated ● built-in language instantion vs. isOfType relationship ● loss of typesafety ● mismatch of models ª accidental complexity 6

  7. Solution: DeepJava ● clabjects instead of classes and objects ● deep instantiation ● potency value defines on which level a certain field exists (default is 1) ª deep characterisation 7

  8. Language Integration public class ProductType^2 extends ProductCategory^2 { public ProductType(String categoryName, int categoryCount, int taxRate) { super(categoryName, categoryCount); taxRate(taxRate); } int taxRate; public void taxRate(int t) { taxRate = t; } public int taxRate() { return taxRate; } private float netPrice^2; public void price (float p)^2 { netPrice = p; } public float price ()^2 { return netPrice * (1 + type.taxRate / 100f ); } } 8

  9. Language Integration public void soldOne() { categorySoldCount++; superType().categorySoldCount++; } DVD aso = new DVD(); aso.price(19.95f / (1 + aso.type().taxRate() / 100f)); aso.name("2001: A Space Odyssey"); aso.promoProduct(haChi_779); ProductCategory{"Software Items" , 333} SoftwareItem extends Product^0; // create SoftwareItem DigitalMedium{DVD_Player, "DVDs", 222, 19} DVD extends SoftwareItem { // create DVD "public String toString () { return name() + \" (\" + " + "type .categoryName() + \")\" + (promoProduct() == null ? \"\" : \" -> \"+promoProduct());}" 9 };

  10. Compiler Prototype ● Polyglot used as parser generator rather than JavaCC ● based on Java 1.4 grammar ● two compile phases – DeepJava sources are translated in Java sources which implement DeepJava semantics – regular javac produces byte-code ● not final/ not available for download 10

  11. My Opinion ● Interesting concept ● Does the world really need it? ● No special VM needed ● Dynamic type and feature creation has to be used with care ● Performance? ● Tool Support? e.g. Debugger 11

  12. Questions?

Download Presentation
Download Policy: The content available on the website is offered to you 'AS IS' for your personal information and use only. It cannot be commercialized, licensed, or distributed on other websites without prior consent from the author. To download a presentation, simply click this link. If you encounter any difficulties during the download process, it's possible that the publisher has removed the file from their server.

Recommend


More recommend