127

I wouldn't use any form of inheritance for World and Country. The World is not a Country, and a Country is not the World. Instead, the World is a "bag" which contains many Countries. By "bag" I mean some kind of container class of your choosing (linked list, set, dictionary/map, or whatever). Pick whichever container type allows you to most efficiently ...


19

Here is a thought or two: Are you sure you even need to model the World? Based on your description it doesn't seem to have any effect. Yes it encapsulates your Countries, but if thats all the program does, then the programs encapsulation should be fine. You need to model relations somehow. Exactly how, depends on your demands, but I would think something ...


12

I think your first requirement is the most telling: World is a collection of countries The remaining requirements go on to talk about countries, leaders and alliances. There is one thing I'm sure about: Without any behavior, World is not a class. At best it is a generic collection: var world = new Collection<Country>(); Given how detailed the ...


11

The 2 first relations, One and Many, have an unspecified lower bound. So when using them you leave an ambiguity of whether they are mandatory or optional. This ambiguity is useful in modeling, in order to cope with one or several of the following circumstances: lower bound could be temporarily undefined, for example during the design phase, when all ...


8

Is the world a country ? Your most basic entity is the Country. The World is the aggregation of all the countries (193 member states according to the United Nations). Clearly, World has no president and no flag. It is therefore not a Country and shall not inherit from it. Isn't something missing from this model ? You've nevertheless missed something ...


6

Your design doesn't change much. You still have the same foreign-key relationship. However, your database can no longer apply any foreign-key constraint. You will have to check the validity of IDs within your application, and also perform any joins manually within your application.


5

There is usually a joiner table between Company and Address in a many to many relationship. Let's call it Company_Address. Company_Address would have Company_Id and Address_Id with relations to Company and Address. It would also have an additional column; the Default Indicator. The Company and Address tables would not have any default indicator. The ...


5

Add a Type table. TypeID PK Type string Change Type in Main to TypeID, making it a Foreign Key to the Type table TypeID. Where you go from here depends on how distinct each type is. If the only distinction is that the fields vary somewhat between types, and there are only a few types, you might get away with having a single Types table, adding ...


5

Uniqueness of those names is a property which is clearly defined only in context of a Pages collection. That is most easiest understood when you think of a Page object changing its "parent" container, or a Page object with no parent container at all. Thus verifying uniqueness is clearly a responsibility of the Pages class, not of a Page. As a consequence, ...


5

You are trying to solve a data access problem, and it requires a data access solution. First, let's examine your proposed solutions, and why they don't solve the problems you have. The Factory Pattern The Factory Design Pattern (also called the Factory Method Pattern) is useful when you want to utilize polymorphism and you want to separate object ...


5

Just because you have a many to many relationship at a data or database level, doesn't mean it has to be represented in code. You should model for the relationships you care about or are useful to you. The relationship of roles to users is more of an implementation detail and not something worth modelling at all at a code level, let the database handle the ...


5

The goal of a component diagram is not the same than a class diagram. Nor is it an alternative to package diagrams. The focus of component diagrams is on self-standing, replaceable components, and how these can be assembled to make more complex systems. 1) The ball/socket representation is about interfaces provided/required. So FooImpl would be a ...


4

I generally agree with your solution and I would do the same, i.e. create a separate model called Share, even though it looks like a RDBMS-like solution. But let's step back and review the available options. First of all, consider the relations of your models. Draw them on a piece of paper and note the type of relations and their associations (belongs to, ...


4

I think people just use them just when they don't care enough about being specific. Personally I avoid the first two examples on your list entirely. For your example, I would assume -- from the context -- that shipments have one-and-only-one shipper, and items exist in one-and-only-one shipment, and suppliers can have zero-to-many shipments.


4

Typically, when you are introduced to the terms of is-a and has-a, you mostly learn them as opposed to one antoher is-a ≠ has-a ( I borrowed the notation from linguists ). Both terms are used like the everyday-language equivalents: e.g. »a dog is an animal« which could be translated to Java-lingo: »The class dog extends the class animal« The point is ...


4

Here's why this is so confusing: c-sharpcorner.com | Dependency, Generalization, Association, Aggregation, Composition in OOP | Ownership | Lifetime dependency | Association | none/anyone | none | Aggregation | one owner | none | Composition | one owner | on owner | Those are some very ...


4

Yes, of course it's okay. Both aggregation and composition are types of association. So what you create might not have all the detail it could have but it will still be correct. You can always add details later. Remember that UML diagrams are models and not complete descriptions of the actual software. I like to add that in many cases, there really is no ...


4

IMHO you should start by getting the model right first. I would not expect a Call to occur in more than one CallQueue at a time, so this is just a 1:M relationship. Moreover, since an Agent can only server one call at a time (as you wrote), this is a 1:1 relationship. The only M:M relationship I see is the one between agents and queues. You main question, ...


3

I typically use the -< "many" notation when writing fast on a whiteboard. It's useful there because we're just trying to sketch a general idea. Vagueness is sometimes helpful at this stage. The difference between "many" vs. "zero or many" and "one or many"... "many" -< is effectively the same as "0 or many" because we cannot assume a lower bound that ...


3

Yes they are, composition is usually called a "strong" association, because if you get rid of the main class the other class has no reason for existance. Aggregation is a sort of "light" association, in which the deletion of one of the related classes does not interfere in the existance of the other.


3

Add a field main_address_id in the User entity or table that holds the ID of the Address record that is the main one. Make that a one to one relationship, if you like. The only solution I have now is to create another One-to-One relationship between Users.main_address and Address but this does not insure that the main_address will actually be part of the ...


3

Let's assume that this will always be 1-1 (e.g., you wont get 2 pilots from a plane to represent pilot and co-pilot). Instead of trying to build this relationship into the Plane or Pilot classes, use a third class that provides the mapping. For lack of a better name, let's call it PilotPlaneMap here. This class could have the following public functions: ...


3

I would say that if an order is a first class object, use /order. If it needs to be associated with one or more customers, the customer ids should be an attribute of the order object.


3

I don’t want to get too pedantic if you’re just using shorthand, but you write in what looks like C++: class World { class country *country_list // not taking array , so that i need not to limit the list }; You definitely would want to use a data structure here, not a C-style pointer. If nothing else, that saves you the trouble of re-implementing the ...


3

There is a lot of confusion about the terms, not all definitions you may find will align. Containment means the containing object does not directly expose the contained object. It exposes its own interface and may call on the contained object on behalf of the client. So there is no way for the client to mess with the contained object. The containing object ...


2

Since there were no answers for a while, I suppose that there is no well-known, widely used name for this relationship. Therefore, my own suggestion is to use: pass-through dependency : the dependency where C is linked to A at the same time directly and through B, pass-through inconsistent dependency : the specific case where C1 is linked to A1, while being ...


2

Answer is quite big. but here it is As you are following MVC design pattern.So, I'll describe in View = jsp, html, javascript exists Controller = servlet Model= Dao Basically in servlet calling your DAO to get data from DB. But throughout the application there are many Variables so for that you need bean. i.e POJO Lets go by hierarchy of project ...


2

IMHO there's multiple issues here: 1 . To me the MVC pattern, like the Quantum Theory has multiple interpretations AFAICS: there's two major ways to do MVC: one where the controller actively tells the view to update once he (the controller) has updated the model one where the view "sees" the model updates and updates itself in turn without any exterior ...


2

When I implement a relationship like that, there are 2 parts to it: The "foreign key" The "index" The foreign key is a constraint which says that the CustomerId in the Invoice table must exist in the Customer table. This (probably) doesn't give you any performance improvement (in fact there's a performance hit to do the check), but it's there to catch ...


2

This could get complicated... 1) How do I structure the tables so I my create the different packages or promotions in a way that is very flexible to add different types of promotions with different requirements? You could start with a packaged_with table to determine which products can be grouped and packaged together: package ------- id (PK) name ...


Only top voted, non community-wiki answers of a minimum length are eligible