Book Review: A Serious Guide to OOP Design Patterns

I've just finished reviewing a new book: AdvancED ActionSpript 3.0: Design Patterns by Ben Smith, published by Apress as part of the Adobe Learning Library
I liked the book very much and I wanted to share my discovery with those of you who (like me) would like to bring the advantages of Object-Oriented Programming and Design Patterns to your Flash/AS3 application development efforts.
I posted my review (“A Serious Guide to OOP Design Patterns”) on Amazon just the other day. Take a look at my review and browse through Mr. Smith's book—if you're interested.

Nikimathew wrote:
Every now and then I ask people if they are familiar with the book, Design Patterns: Elements of Reusable Object-Oriented Software. On such occassions, I'm often surprised to hear someone respond, "Yes, I've read it." Having spent close to three years running a study group devoted to understanding the subtleties, combinations and variations of the patterns in this book and others, I am often compelled to ask these individuals if they actually believe that the book can be "read" rather than "studied"? trolling for new members?
three years? c'mon. i love the GoF book, but it's not holy writ. and it hasn't saved object-oriented software development.
sounds like you need to move on to a new topic. go buy another book.
%

Similar Messages

  • Book review  Essbase & Oracle OLAP The guide to Multidimensional Analysis

    I won't waste the space here to talk about the book, I'll just tell you it is worth the money for it. For my full review go to
    http://glennschwartzbergs-essbase-blog.blogspot.com/2010/01/book-review-oracle-essbase-oracle-olap.html

    Prashant, DW environments are generally organized into multiple areas, some of which you've identified:
    1. Source systems which provide data for the data warehouse
    2. The "data warehouse" itself - a central repository for all the transactions, etc. collected from the source systems. Main function is to STORE all of the data in a clean, consistent manner
    3. Possibly multiple datamarts that organize the base DW data into specific subsets that are meaningful to the end users. Can be ROLAP, MOLAP, HOLAP, etc.
    Each of these tiers has different goals, which usually means they need separate architectures and/or hardware:
    1. Don't put BI systems on top of your OLTP system...if a user writes a run-away query, it can bring down your transaction processing systems.....
    2. DW can either be in 3nf or dimensional form, but its main job is to capture the low level transactions and make sure they conform to standards (including data quality, etc.) Users SOMETIMES run queries directly against DW tables, but once the DW starts getting big (i.e. terabytes) you probably don't want users hitting directly against it
    3. OLAP datamarts are almost always in dimensional form, but only contain subsets of data from the DW. These are designed to hit very specific business problems, and typically are at a much higher level of detail than the DW.
    Hope this helps. DON'T PUT YOUR DW or BI cubes on the OLTP system!!!
    Scott

  • How do I send my book reviews to the newspaper from Mac to Microsoft Word?

    I've been asked to send my book reviews to the newspaper in Microsoft Word.  How do I do that with an AppleBook Air?    

    compose the review in word (this is not included, you need to purchase it if you do not already have it) then attach it in an email to the newspaper.

  • I am writing a book review in iBooks

    Using my ipad2  I read a book, gave it five stars, then entered the text for a book review. How do I submit the review. I moved the keyboard expecting to see a submit button. There is no oblivious way to submit my review. I need some help here. Thanks in advance. I am stuck.

    FYI: You may terminate a specific app by just quickly double clicking the home button (this action displays the apps currently running at the bottom of the screen that you have control over), then select the app you want to terminate in this case iBooks by holding your finger on the app icon until you see the red dot with the minus, then simply touch the red dot and the job terminates cleanly without having to reboot the system.

  • Which Design Pattern and how to design using OOP this scenario

    I am having trouble designing a module, can anybody help me?
    Because it will be hard to maintain this kind of module, I also think that this can test my skill of design pattern usage.
    Requirement
    This is basically an agricultural project (web application). I need to design a module where some calculation takes place.
    There are different crops involved like maize, tomato, okra etc. Each of these crops has different traits.
    Each trait has a measurement scale which lies in integer like 200-1000. Now let's say I have planted the crop and done measurement noted down the traits. Now I want to do some sort of measurement. Some measurements are simple and some are complex.
    Example
    Lets take an example of crop maize. I have recorded observations for 15 traits. (We'll use trait1-trait15 as examples, the actual name can be like plt_ht, yld, etc.)
    I recorded 5 observations for each trait:
    trait1 trait2 trait3 trait5 trait6..... trait15
    01,02,03,04 01,02,03,04 01,02,03,04
    User logs into system and selects his crops and enters data for these observations. I have to calculate either average or sum of the data entered for each trait.
    Complexity / centre of the problem
    So far it's simple but complexity comes when I have some different formulas for some of the traits.
    Example: trait YLD has a formula based on which I have to calculate its value, which may also depend on some other traits. Each different crop can have different traits.
    All this I am able to do - whenever user selects crop I will check for those specific traits and do calculations (if it's not a special trait then I either average or sum it, based on db entry), but there is a lot of hard coding.
    I would like to have suggestions on a better way of handling this.
    My code needs to handle both simple and complex calculations.
    Simple calculations are easy, I have take average of value entered for trait.
    The problem comes when I have to do complex calculations, since each crop have different traits with their own formulas, so to calculate I have to check for crop and then for complex trait. So I have to hardcode the trait name of complex traits.
    Can any tell me how I can design this using Java oops [?!?] so that I can make it generic?
    I have about 10 different crops. Some calculations are specific to crops, so there will be lot of code like the if below:
    hasZeroValue = (HashMap<String, ArrayList<String>>) dataValues[1];
    } else if(cropId.equalsIgnoreCase("MZ") && traitName.equalsIgnoreCase("Shelling")) {
        avg=HybridTestDataUtility.calculateAvg(traitName, dataPoint, dataTraits, traitValues,dataPvalues, dataPoint, type);
        avg=avg*dataPoint;
        traitAvg=getMaizeYeild(traitName, traitAvg, population, avg, hybrid, area);
    } else if(cropId.equalsIgnoreCase("OK") && traitName.equalsIgnoreCase("YLDGM")) {
        avg=HybridTestDataUtility.calculateAvg(traitName, dataPoint, dataTraits, traitValues,dataPvalues, dataPoint, type);
        //avg=avg*dataPoint;
        Object[] dataValues=getOKRAYield(traitName, traitAvg, population, avg, dividend,hasZeroValue,hybrid,repl);
        traitAvg = (HashMap<String, Float>) dataValues[0];
        hasZeroValue = (HashMap<String, ArrayList<String>>) dataValues[1];
    } else if(cropId.equalsIgnoreCase("HP") && traitName.equalsIgnoreCase("w1-w10")) {
        avg=HybridTestDataUtility.calculateAvg(traitName, dataPts, dataTraits, traitValues,dataPvalues, dataPoint, type);
        avg=avg*dataPoint;
        Object[] dataValues=getHotPepperYield(traitName, traitAvg, population, avg,dividend,hasZeroValue,hybrid,repl);
        traitAvg = (HashMap<String, Float>) dataValues[0];
        hasZeroValue = (HashMap<String, ArrayList<String>>) dataValues[1];
    } else if(cropId.equalsIgnoreCase("TO") && traitName.equalsIgnoreCase("TLSSG_70")) {
        traitAvg=calculateTLCV(traitName, traitAvg,dataPoint, dataTraits, hybrid, repl, traitValues, dataPvalues,50);
    } else if(cropId.equalsIgnoreCase("TO") && traitName.equalsIgnoreCase("TLSSG_100")) {
        traitAvg=calculateTLCV(traitName, traitAvg,dataPoint, dataTraits, hybrid, repl, traitValues, dataPvalues,50);
    } else if(cropId.equalsIgnoreCase("TO") && traitName.equalsIgnoreCase("YVMV_60")) {
        traitAvg=tomatoYVMVCalculation(traitName, traitAvg,dataPoint, dataTraits, hybrid, repl, traitValues, dataPvalues);
    } else if(cropId.equalsIgnoreCase("TO") && traitName.equalsIgnoreCase("YVMV_90")) {
        traitAvg=tomatoYVMVCalculation(traitName, traitAvg,dataPoint, dataTraits, hybrid, repl, traitValues, dataPvalues);
    } else if(cropId.equalsIgnoreCase("TO") && traitName.equalsIgnoreCase("YVMV_120")) {
        traitAvg=tomatoYVMVCalculation(traitName, traitAvg,dataPoint, dataTraits, hybrid, repl, traitValues, dataPvalues);
    } else if(cropId.equalsIgnoreCase("TO") && traitName.equalsIgnoreCase("ELCV_60")) {
        traitAvg=tomatoYVMVCalculation(traitName, traitAvg,dataPoint, dataTraits, hybrid, repl, traitValues, dataPvalues);
    } else if(cropId.equalsIgnoreCase("TO") && traitName.equalsIgnoreCase("ELCV_90")) {
        traitAvg=tomatoYVMVCalculation(traitName, traitAvg,dataPoint, dataTraits, hybrid, repl, traitValues, dataPvalues);
    } else if(cropId.equalsIgnoreCase("TO") && traitName.equalsIgnoreCase("ELCV_120")) {
        traitAvg=tomatoYVMVCalculation(traitName, traitAvg,dataPoint, dataTraits, hybrid, repl, traitValues, dataPvalues);
    } else if(cropId.equalsIgnoreCase("OK") && traitName.equalsIgnoreCase("YVMV_60")) {
        traitAvg=tomatoYVMVCalculation(traitName, traitAvg,dataPoint, dataTraits, hybrid, repl, traitValues, dataPvalues);
    } else if(cropId.equalsIgnoreCase("OK") && traitName.equalsIgnoreCase("YVMV_90")) {
        traitAvg=tomatoYVMVCalculation(traitName, traitAvg,dataPoint, dataTraits, hybrid, repl, traitValues, dataPvalues);
    } else if(cropId.equalsIgnoreCase("OK") && traitName.equalsIgnoreCase("YVMV_120")) {
        traitAvg=tomatoYVMVCalculation(traitName, traitAvg, dataPoint, dataTraits, hybrid, repl, traitValues, dataPvalues);
    } else if(cropId.equalsIgnoreCase("OK") && traitName.equalsIgnoreCase("ELCV_60")) {Can anybody think of a way to make a generic approach to this?

    There are crops and each crop have traits , traits are actually a mesuremet
    scale to decide growth of a seed of a particular crop.
    This module is to for planters to observe growth of seeds sowed of certain
    crops and take down n no of observation for each trait and upload in csv format.Once they enter
    data i have to either avg out the values or sum the values or sometimes
    there are more complex function that i have to apply it may differe for each
    trait .This is the whole module about.Just to give an idea about how they
    will enter data
    Hyubrid(seed) trait1 trait2 trait3 trait5 trait6..... trait15
    Hybrid1 01 02 03 04 01
    HYbrid2 04 06 08 04 01
    HYbrid2 04 06 08 04 01
    HYbrid2 04 06 08 04 01
    HYbrid2 04 06 08 04 01
    Once they enter data in this format i have to give result something like
    this.
    Here avg colum does not necessaryly mean avg it can be sum or any formula
    based resutl.Hybrid is the seed for which they record the observation.
    I have shown avg column only for two tratis it is actually for all the
    traits.
    Hyubrid(seed) trait1 Avg trait2 avg trait3 trait5 trait6..... trait15
    Hybrid1 01 01 02 04 03 04 01
    HYbrid2 04 04 06 10 08 04 01
    HYbrid2 04 04 06 12 08 04 01
    HYbrid2 04 04 06 14 08 04 01
    HYbrid2 04 04 06 12 08 04 01
    Hope this clarifies atleat a but
    The data are not correctly indented but there is no way i can format it.

  • Recommend design pattern books

    Hi
    I work at a university and I am looking for some books on design patterns in LabVIEW, preferably for 2009.
    I am interested in state machine and master/slave design and perhaps also producer/consumer design pattern.
    Can you recommend some books on these techniques.
    Simon
    LabVIEW 8.6 / 2009 / 2010
    Vision Development Module 8.6 / 2009 / 2010
    VBAI 3.6 / 2010

    The LabVIEW Style Book by Peter Blume has a chapter devoted to discussing patterns in LV.  If you want to go generic and not pin yourself to one language, the classic of the subject is Design Patterns by Gamma, Helm, Johnson & Vlissides - that book has been on my shelf ever since I used it as a textbook over a decade ago.
    Greg
    Certifed LabVIEW Developer

  • Suggest good book for J2EE Design Pattern.

    Is there any good book for J2EE Design pattern? I know Head First Design Pattern book, but is focuses oncore java. I want to learn in detail with examples J2EE design pattern.
    Please suggest good books.
    Thanks in advance.
    Rahul.

    most j2ee patterns are discredited now. they were mostly workarounds for deficiencies in ejb 1 & 2 specs.
    "core j2ee patterns" is your best bet, but take it with a grain of salt.
    better to learn spring, IMO:
    springframework.org
    %

  • EJB Design Patterns Book Question

    I have been recently reading the EJB Design Patterns book by Floyd Marinesu.
    In one of the earlier chapters he says that 'entity beans are transactional creatures, each method call on an entity will require a separate transaction ..'.
    Surely this is wrong, if you are using CMT and mark your method transaction attribute as Required then if the calling bean has a transaction the called bean will use that transaction, rather then requiring a separate transaction.
    Someone please explain.

    Quoted out of context, the statement seems to be incorrect in some cases. IMO, the fact stressed is the "synchronization of the remote entity", which might have been loosely associated with a separate transaction.
    Here's the original quote.
    Furthermore, since entity beans are transactional creatures, each method call on an entity will require a separate transaction on the server side, requiring synchronization of the remote entity with its underlying data store and maintenance on behalf of the application server.
    Maybe Marinescu would answer that better :-)

  • A good book on design patterns?

    Hi there. Just wondering if anyone could recommend a good book on design patterns, for someone who's relatively experienced at the nuts and bolts of programming in a few languages, but hasn't really considered design patterns before? Someone recommended Gamma et al's, 'Design patterns: elements of reusable object-oriented software' to me, but it is perhaps a little dated now. Any thoughts?

    Surprisingly, no one posted the link to the Sun J2EE Pattern blueprints:
    http://java.sun.com/blueprints/corej2eepatterns/index.html
    I also liked the O'Reilly publication "J2EE Design Patterns"
    They are specific to J2EE architecture, but there's a lot of reuse available even if that's not the architecture you're working with.
    Brian

  • Book Review Name

    How do I change the name that shows up in iBooks when I write a book review?

    The instructions concerned CDs; the DVDs work in a similar way:
    However, from your follow-up i get the sense that you want to "rip" the DVD in order to view it away from your computer, for example on your iPod, iPad or other mobile device. There are ways to achieve this but the main concern has to do with the status of the DVD. If it is a commercial DVD (educational or otherwise notwithstanding) it is probably copyright protected, which means that it is illegal to rip the files since the encryption code to protect is there to prevent piracy. I am not about to impugn your intentions by imputing nefarious goals to you, but the Digital Rights Management concept is instituted to protect the intellectual property of the copyright owner. You are allowed to make an archival copy for safekeeping; it would be better to ask among your tech-savvy friends for the method since it is contrary to the Terms of Use to suborn illegal actions here.

  • HT201991 how do I send a link of a book review to an email address from itunes books?

    How do I send a link from an itunes book review to an email?

    I may have missed something, but I don't believe there are links directly to a specific review, only to the book overall.
    Regards.

  • [BOOK] What's the best book about DESIGN PATTERN

    Hi Guys,
    by experience, what's the best book for you concerning the Design Pattern in Abap. I mean :
    Quality,
    Comprehensiveness,
    Clearness,
    Amount of chapter,
    etc.
    Thank for advices.
    Rachid.

    Dear Rachid,
    This is rank 1 book, but u have learn online also. So many websites are there. example search: OO Design patterns ZEVOLVING.
    Regards,
    Abbas.

  • Bad OOP design?

    I have to access some data before my program starts (to prevent a slow down while the program is running). The thing is, I need to init some objects before my program loads. It works fine now, but when I do the thing that I need the objects for, it hangs for a very short time (while it creates them, you see, right now I can only create them when the action they are needed for is called; it is to detailed to explain). The problem is it just looks unprofessional. Anyway, java.awt.component has a method that would make it possible for me to do the object creation before the program starts. Would it be bad to make a class that extends Component, and then define a method in there that get the information I need to makes it possible for me to create my object before the program starts? Is this bad OOP design?
    Thank you!
    Joshua

    Of course you can't really initialize stuff "before your program loads" since the initialization is part of your program, just before you program tells the user it's loaded.
    Probably the way to intialise stuff early is to do it in static, which will happen as soon as the class loads.
    Mostly you can do it with static object variables initialised to new objects.
    But you can get fancy and put a static code block in the class. Just a piece of code under
    static {
      .. do some initialization

  • Java Book reviews

    Hi All,
    Anyone looking for book reviews of Java titles - particularly introductory books - should look at the TechBookReport website (http://www.techbookreport.com). You might find it useful...

    Thanks nice link :)

  • What is command design pattern? what is the problem that it solves?

    Hi i have been reading few articles on command design pattern but was unable to understand what it is and what problem does it solve. As far as my understanding goes if there is a pre specified method in an object that could execute and perform the necessary activities then it is called as command design pattern. Why is it named as command design pattern, it is because in a shell we use commands to retrieve output. For example when we type "dir" in dos command prompt it returns the list of files. so here we have to remember a preexisting exe file named "dir" which does something when used. So here like we call it command because when "dir" is passed to the computers it returns something that is expected. may be the computer obeys the command issued and return something back. So like wise if there is a method that is defined as as the command, for example in struts framework the action class must have a method "execute()" which is called by the framework to execute the necessary action mapped to it. So if there is a predefined method like "execute" in struts then the object is said to be followed command design pattern. So what actually does it solve?
    What ever i have written is my understanding from the articles i have read about the design pattern. So kindly correct me if i am wrong. Help me understanding what actual problem does this pattern solves. Thanking you in advance.

    This is really off-topic for these forums. You might do better on StackOverflow.com. I'll just say that although the first Design Patterns book came as a revelation to me, it was more for (a) the nomenclature (decorator, factory, facade, etc) which is still with us and (b) about five of the original patterns, which told me things I didn't already know. I've never used any of the others, including Command, and the whole design patterns thing quickly degenerated into farce with what seemed like a sustained attempt to reduce the whole of computer science to design patterns, which really isn't the point. As an example, there is one in another book called Type Object, which is nothing but 3rd normal form, which can be defined roughly in a couple of sentences. This pattern went on for dozens of pages with a very artificial example. I wrote to the mailing list about it: 'Type Object considered hilarious'. I got a rude reply from the original author, which I guess I expected, but also an incredible response from the list owner, saying I should recast my objections in the form of a design pattern. That lost it for me. True story. Moral: don't take this religion, or any IT religion, too seriously. They come around every 18 months or so with the regularity of the next bit of Moore's Law. I've seen dozens of them come and go since 1971, all with something to say, all 90% nonsense.
    See here for a longer version of this incident.

Maybe you are looking for