3

I am working on a short java assignment that I have been set.

The question is as follows:

Design and write classes to model different types of Publications in a Library. Consider carefully the different types of publications, e.g. Books and Magazines. Put all attributes and methods which are common to all types of Publications in a super-class, and then extend this super-class appropriately to create a set of sub-classes.

Make sure that you include appropriate constructor, getter, setter and customised methods in your classes. Use method overloading and overriding where appropriate.

Make maximum use of inheritance in your design and class code.

Implement the following Interface Class in your design and coding:

+ getPublisher() : String
+ getPublicationTitle() : String
+ getPrice : float
+ setPublication(publisherIn: String, titleIn:String, priceIn:float) : void

So I have answered it as best I can, please could anybody read it and check that I am on the right track and understand what I am meant to be doing, it seems fat to simple to be correct? Oh and javadocs are not finished yet [=

public interface PublicationInterface
{
    /**
     * Returns the book publisher name (as a String) 
     */
    public String getPublisher();

    /**
     * Returns the book publication title (as a String)
     */
    public String getPublicationTitle();

    /**
     * Returns the book price (as a float)
     */
    public float getPrice();

    /**
     * Sets the book publication details.
     * 
     * @param publisherIn   The Book Publisher (as a String)
     * @param titleIn       The Book Title (as a String)
     * @param priceIn       The Book Price (as a float)
     */
    public void setPublication(String publisherIn, String publicationTitleIn, float priceIn);
}

abstract public class Publications implements PublicationInterface
{
   // Attributes
  protected String publisher;
  protected String publicationTitle;
  protected float price;

        public Publications(String publisherIn, String publicationTitleIn, float priceIn)
            {
                publisher = publisherIn;
                publicationTitle = publicationTitleIn;
                price = priceIn;
            }

        public String getPublisher()
            {
                return (publisher);
            }

        public String getPublicationTitle()
            {
                return (publicationTitle);
            }

        public float getPrice()
            {
                return (price);
            }

        public void setPublication(String publisherIn, String publicationTitleIn, float priceIn)
            {
                publisher = publisherIn;
                publicationTitle = publicationTitleIn;
                price = priceIn;
           }

}

public class Magazine extends Publications
{
    String editor;
    String date;

    public Magazine(String publisherIn , String publicationTitleIn, float priceIn, String editorIn, String dateIn)
        {
            super (publisherIn , publicationTitleIn, priceIn);

            editor = editorIn;
            date = dateIn;
        }

    public void setPublication(String publisherIn, String publicationTitleIn, float priceIn)
        {
            publisherIn = publisher;
            publicationTitleIn = publicationTitle;
            priceIn = price;
        }

    public String getEditor()
        {
            System.out.println("The editor of this magazine is " + editor);
            return (editor);
        }

    public String getDate()
        {
            System.out.println("The publication date of this magazine is " + date);
            return (date);
        }

    public String getPublisher()
        {
            System.out.println("The publisher of this magazine is " + publisher);
            return (publisher);
        }

    public String getPublicationTitle()
        {
            System.out.println("The publication title of this magazine is " + publicationTitle);
            return (publicationTitle);
        }

    public float getPrice()
        {
            System.out.println("The price of this magazine is £" + price);
            return (price);
        }

}

public class ReferenceMaterial extends Publications
{

    String genre;
    String subject;

    public ReferenceMaterial(String publisherIn , String publicationTitleIn, float priceIn,     String genreIn, String subjectIn)
        {
            super (publisherIn , publicationTitleIn, priceIn);            

            genre = genreIn;
            subject = subjectIn;
        }

    public String getGenre()
        {
            System.out.println("The genre of this material is " + genre);
            return (genre);
        }

    public String getSubject()
        {
            System.out.println("The subject of this material is " + subject);
            return (subject);
        }

    public String getPublisher()
        {
            System.out.println("The publisher of this material is " + publisher);
            return (publisher);
        }

    public String getPublicationTitle()
        {
            System.out.println("The publication title of this material is " + publicationTitle);
            return (publicationTitle);
        }

    public float getPrice()
        {
            System.out.println("The price of this material is £" + price);
            return (price);
        }
}


public class Book extends Publications
{
    int pageNumber;
    String author;

    public Book(String publisherIn , String publicationTitleIn, float priceIn, int pageNumberIn,     String authorIn)
        {
            super (publisherIn , publicationTitleIn, priceIn);

            pageNumber = pageNumberIn;
            author = authorIn;

        }

    public int getPageNumber()
        {
            System.out.println("The number of pages in this book are " + pageNumber);
            return (pageNumber);
        }

    public String getAuthor()
        {
            System.out.println("The author of this book is " + author);
            return (author);
        }

    public String getPublisher()
        {
            System.out.println("The publisher of this book is " + publisher);
            return (publisher);
        }

    public String getPublicationTitle()
        {
            System.out.println("The publication title of this book is " + publicationTitle);
            return (publicationTitle);
        }

    public float getPrice()
        {
            System.out.println("The price of this book is £" + price);
            return (price);
        }

}

public class TestLibrary
{

    public static void main()
      {     
        Magazine magazine1 = new Magazine ("SanYonic Publishing", "Ayup Magazine", 99, "Yeshumenku Suni", "12/09/2011");

        System.out.println();
        magazine1.getEditor();
        magazine1.getDate();
        magazine1.getPublisher();
        magazine1.getPublicationTitle();
        magazine1.getPrice();
        System.out.println();

        ReferenceMaterial referenceMaterial1 = new ReferenceMaterial ("Dorling kindesy", "killer Sharks In The Solent", 200, "Nature", "Sharks");

        referenceMaterial1.getGenre();
        referenceMaterial1.getSubject();
        referenceMaterial1.getPublisher();
        referenceMaterial1.getPublicationTitle();
        referenceMaterial1.getPrice();
        System.out.println();

        Book Book1 = new Book ("Hodder & Soughton", "One Day", 75, 1105, "David Nicholls");

        Book1.getPageNumber();
        Book1.getAuthor();
        Book1.getPublisher();
        Book1.getPublicationTitle();
        Book1.getPrice();
        System.out.println();        
      }

}
3
  • 2
    If this is a homework then please use homework tag. Commented Jan 18, 2012 at 0:10
  • @MiserableVariable Homework Tag? oh do you mean in the tags at the bottom, ok, am I able to edit the tags, sorry Commented Jan 18, 2012 at 0:11
  • reading the complete question, I realize that such open-ended questions are not appropriate for stackoverflow. Please see the FAQ. But I will tell you that the class Publications should be called Publication and you are indenting method bodies twice. It is not a very complex assignment, just go ahead and submit it and wait for more difficult problems to ask here. Commented Jan 18, 2012 at 0:20

3 Answers 3

2

This looks fine save that you don't need the interface at all. I didn't see it mentioned in the homework, and it's certainly not necessary for subclassing.

Interfaces are for common methods implemented by a set of classes that are otherwise not related (specifically not part of a class hierarchy).

Since your classes all descend from the parent Publications class, there is not need for something like the PublicationsInterface in this case. The super class fills that role nicely.

Publication p = new Book();
p.setPublisher("Acme Books");
Sign up to request clarification or add additional context in comments.

3 Comments

Based on the OP's description I think the HW requires using an interface, but I agree.
@Will Thank you, with reference to the interface class, the last part of the question does say "Implement the following Interface Class in your design and coding". This is what is confusing me, why when it is not neccesary, or can I do this in a different way to make use of the interface class?!
I'd keep it the way you have it, some instructors are unreasonably picky when it comes to their requirements and this way you're being 'safe'. In the real world you wouldn't actually need an interface as Will mentioned.
1

Your design is not unreasonable, although your naming convention is a little redundant (you don't need to name an interface with the Interface suffix). Also, stick with singular nouns for the class names instead of switching from Publications to Book.

Comments

1

Here is an example of using abstract classes.

    public abstract class Publication 
    {
      private String _ISBN;
      private String _Title;
      private String _Publication;
      private float _Price;

      public String getISBN() { return _ISBN;}
      public void setISBN(String isbn)
      {
        _ISBN = isbn;
      }

      public String getTitle() { return _Title;}
      public void setTitle(String title)
      {
        _Title = title;
      }

      public String getTitle() { return _Title;}
      public void setTitle(String title)
      {
        _Title = title;
      } 

      public String getPublisher() { return _Publication;}
      public void setPublisher(String publication)
      {
        _Publication= publication;
      } 

       public float getPrice() { return _Price;}
       public void setPrice(float price)
       {
           _Price= price;
       } 
    }

    public class Book extends Publication
    {

    }  

    public class Magazine extends Publication
    {

    }  

//using the class
Book book = new Book();
book.getPrice();

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.