L'approccio "Gli oggetti prima" è una buona idea? [chiuso]

4

Pensi che i novizi della programmazione debbano imparare oggetti dal primo giorno, come si vede nel libro "Gli oggetti prima di Java: una introduzione pratica con BlueJ" di David Barnes? O pensi che questa sia una cattiva idea?

Per chi non ha familiarità con il libro, qui è un elenco degli argomenti discussi nei capitoli:

Chapter 1 deals with the most fundamental concepts of object-orientation: objects, classes and methods. It gives a solid, hands-on introduction to these concepts without going into the details of Java syntax. It also gives a first look at some source code. We do this by using an example of graphical shapes which can be interactively drawn, and a second example of a simple laboratory class enrolment system.

Chapter 2 opens up class definitions and investigates how Java source code is written to create behavior of objects. We discuss how to define fields and implement methods. Here, we also introduce the first types of statements. The main example is an implementation of a ticket machine. We also look back to the laboratory class example from chapter 1 to investigate that a bit further.

Chapter 3 then enlarges the picture to discuss interaction of multiple objects. We see how objects can collaborate by invoking each other's methods to perform a common task. We also discuss how one object can create other objects. A digital alarm clock display is discussed that uses two number display objects to show hours and minutes. As a second major example, we examine a simulation of an email system in which messages can be sent between mail clients.

In Chapter 4, we continue by building more extensive structures of objects. Most importantly, we start using collections of objects. We implement an electronic notebook and an auction system to introduce collections. At the same time, we discuss iterations over collection and have a first look at loops. The first collection being used is an ArrayList. In the second half of the chapter we introduce arrays as a special form of a collection, and the for loop as another form of a loop. We discuss an implementation of a web log analyzer as an example for array use.

Chapter 5 deals with libraries and interfaces. We introduce the Java standard library and discuss some important library classes. More importantly, we explain how to read and understand the library documentation. The importance of writing documentation in software development projects is discussed, and we end by practicing how to write suitable documentation for our own classes. Random, Set and Map are examples of classes that we encounter in this chapter. We implement an Eliza-like dialogue system and a graphical simulation of a bouncing ball to apply these classes.

Chapter 6, titled Well-behaved objects, deals with a whole group of issues connected to producing correct, understandable, and maintainable classes. It covers issues ranging from writing clear, understandable code - including style and commenting - to testing and debugging. Test strategies are introduced and a number of debugging methods are discussed in detail. We use an example of a diary for appointment scheduling and an implementation of an electronic calculator to discuss these topics.

In Chapter 7, we discuss more formally the issues of dividing a problem domain into classes for implementation. We introduce issues of designing classes well, including concepts such as responsibility-driven design, coupling, cohesion, and refactoring. An interactive, text-based, adventure game (World of Zuul) is used for this discussion. We go through several iterations of improving the internal class structure of the game and extending its functionality, and end with a long list of proposals for extensions that may be done as student projects.

Chapters 8 and 9 introduce inheritance and polymorphism with many of the related detailed issues. We discuss a simple database of CDs and videos to illustrate the concepts. Issues of code inheritance, subtyping, polymorphic method calls and overriding are discussed in detail.

In Chapter 10 we implement a predator/prey simulation. This serves to discuss additional abstraction mechanisms based on inheritance, namely interfaces and abstract classes.

Chapter 11 introduces two new examples: an image viewer and a sound player. Both examples serve to discuss how to build graphical user interfaces (GUIs).

Chapter 12 then picks up the difficult issue of how to deal with errors. Several possible problems and solutions are discussed, and Java's exception handling mechanism is discussed in detail. We extend and improve an address book application to illustrate the concepts.

Chapter 13 steps back to discuss in more detail the next level of abstraction: how to structure a vaguely described problem into classes and methods. In previous chapters we have assumed that large parts of the application structure already exist, and we have made improvements. Now it is time to discuss how we can get started from a clean slate. This involves detailed discussion of what the classes should be that implement our application, how they interact, and how responsibilities should be distributed. We use class-responsibilities-collaborators (CRC) cards to approach this problem, while designing a cinema booking system.

In Chapter 14, we try to bring everything together and integrate many topics from the previous chapters of the book. It is a complete case study, starting with the application design, through design of the class interfaces, down to discussing many important functional and non-functional characteristics and implementation details. Topics discussed in earlier chapters (such as reliability, data structures, class design, testing, extendibility, etc.) are applied again in a new context.

    
posta fredoverflow 19.08.2011 - 11:34
fonte

3 risposte

10

Personalmente ritengo che i concetti di programmazione più facili da imparare siano quelli che seguono una logica procedurale semplice (ad esempio, rappresentano un diagramma di flusso). Il prossimo è il più semplice da imparare: gli oggetti di base, in quanto puoi insegnare i paralleli al mondo reale (Auto, Cane, Persona, ecc.).

Quindi, in breve, penso che dovresti iniziare il giorno 1 insegnando loro la logica di flusso di base e poi puoi spostarti sugli oggetti abbastanza velocemente dopo.

La programmazione funzionale è probabilmente la più difficile da insegnare ai nuovi programmatori a meno che non abbiano un background matematico o semplicemente pensino in quel modo.

YMMV con questa risposta: -)

    
risposta data 19.08.2011 - 11:41
fonte
2

Non sono sicuro dello stato di BlueJ ora, ma mi è stato insegnato da David Barnes e Michael Kölling e ho usato quel libro e BlueJ nel 2004-2006.

È bello avere il banco di lavoro e vedere come gli oggetti interagiscono tra loro.

Come Martijn ha detto che il flusso di base è il modo più semplice per capire un programma, un problema con BlueJ e l'approccio Objects First è che tu sei isolato da Main () e come si avvia un'applicazione in modo da poterti concentrare sugli oggetti e le loro interazioni .

BlueJ è ottimo per l'apprendimento di OO e linguaggio Java, ma una volta che sei al corrente con OO, passerei ad es. Eclipse e inizia a utilizzare tale conoscenza per creare applicazioni con un IDE progettato per la creazione di applicazioni piuttosto che l'apprendimento di OO / Java.

    
risposta data 19.08.2011 - 11:49
fonte
1

Sono stato coinvolto in una classe insegnata con Objects First e BlueJ; mentre venivo in classe con un background di programmazione più strong del previsto, i miei compagni di classe che non avevano conoscenze di programmazione precedenti si trovavano continuamente confusi dall'ordine in cui venivano insegnate le cose: cose come insegnare le specifiche dell'uso di ArrayList senza spiegare cosa il termine "matrice" significa o cosa significa "elenco", o non spiega cosa significa "pubblico" fino al capitolo 5 (dopo il debugging!), o all'insegnamento "for-each" quasi una settimana prima di "for" (basato sul valutiamo di aver esaminato il libro).

Inoltre sono stati completamente persi su come fare le basi quando si sono trasferiti su Eclipse, non avendo idea di come iniziare con un progetto o creare i loro oggetti senza l'interfaccia specializzata BlueJ. Dopo circa la decima volta la persona che stavo facendo da tutor mi ha detto "Odio come BlueJ fa questo", l'ho sistemata con Eclipse (che non è mai stata usata o insegnata nel nostro corso) e ho dovuto farla passare attraverso le basi.

In sostanza, è un'idea carina ma eseguita orribilmente all'interno di quel testo.

    
risposta data 27.02.2012 - 18:38
fonte

Leggi altre domande sui tag