कंप्यूटर प्रोग्रामिंग
Computer programming - Wikipedia
Computer programming or coding is the composition of sequences of instructions, called programs, that computers can follow to perform tasks.
OOAD
Popular modeling techniques include Object-Oriented Analysis and Design ( <anchor>OOAD</anchor>) and Model-Driven Architecture ( MDA). The Unified Modeling Language ( UML) is a notation used for both the OOAD and MDA.
Object-oriented analysis and design - Wikipedia
Object-oriented analysis and design - Wikipedia[Jump to content](#bodyContent)

Main menu

Main menu

move to sidebarhide

Navigation


- [Main page](/wiki/Main_Page "Visit the main page [z]")
- [Contents](/wiki/Wikipedia:Contents "Guides to browsing Wikipedia")
- [Current events](/wiki/Portal:Current_events "Articles related to current events")
- [Random article](/wiki/Special:Random "Visit a randomly selected article [x]")
- [About Wikipedia](/wiki/Wikipedia:About "Learn about Wikipedia and how it works")
- [Contact us](//en.wikipedia.org/wiki/Wikipedia:Contact_us "How to contact Wikipedia")
- [Donate](https://donate.wikimedia.org/wiki/Special:FundraiserRedirector?utm_source=donate&utm_medium=sidebar&utm_campaign=C13_en.wikipedia.org&uselang=en "Support us by donating to the Wikimedia Foundation")

Contribute


- [Help](/wiki/Help:Contents "Guidance on how to use and edit Wikipedia")
- [Learn to edit](/wiki/Help:Introduction "Learn how to edit Wikipedia")
- [Community portal](/wiki/Wikipedia:Community_portal "The hub for editors")
- [Recent changes](/wiki/Special:RecentChanges "A list of recent changes to Wikipedia [r]")
- [Upload file](/wiki/Wikipedia:File_upload_wizard "Add images or other media for use on Wikipedia")

[![](/static/images/icons/wikipedia.png)![Wikipedia](/static/images/mobile/copyright/wikipedia-wordmark-en.svg)![The Free Encyclopedia](/static/images/mobile/copyright/wikipedia-tagline-en.svg)](/wiki/Main_Page)

[Search](/wiki/Special:Search "Search Wikipedia [f]")

Search

Appearance

- [Create account](/w/index.php?title=Special:CreateAccount&returnto=Object-oriented+analysis+and+design "You are encouraged to create an account and log in; however, it is not mandatory")
- [Log in](/w/index.php?title=Special:UserLogin&returnto=Object-oriented+analysis+and+design "You're encouraged to log in; however, it's not mandatory. [o]")

Personal tools

- [Create account](/w/index.php?title=Special:CreateAccount&returnto=Object-oriented+analysis+and+design "You are encouraged to create an account and log in; however, it is not mandatory")
- [Log in](/w/index.php?title=Special:UserLogin&returnto=Object-oriented+analysis+and+design "You're encouraged to log in; however, it's not mandatory. [o]")

Pages for logged out editors [learn more](/wiki/Help:Introduction)

- [Contributions](/wiki/Special:MyContributions "A list of edits made from this IP address [y]")
- [Talk](/wiki/Special:MyTalk "Discussion about edits from this IP address [n]")

## Contents

move to sidebarhide

- (Top)

- [1History](#History)
- [2Overview](#Overview)
- [3Object-oriented analysis](#Object-oriented_analysis)
- [4Object-oriented design](#Object-oriented_design)Toggle Object-oriented design subsection  - [4.1Input (sources) for object-oriented design](#Input_(sources)_for_object-oriented_design)
  - [4.2Object-oriented concepts](#Object-oriented_concepts)
  - [4.3Designing concepts](#Designing_concepts)
  - [4.4Output (deliverables) of object-oriented design](#Output_(deliverables)_of_object-oriented_design)
  - [4.5Some design principles and strategies](#Some_design_principles_and_strategies)
- [5Object-oriented modeling](#Object-oriented_modeling)
- [6See also](#See_also)
- [7References](#References)
- [8Further reading](#Further_reading)
- [9External links](#External_links)

Toggle the table of contents

# Object-oriented analysis and design

13 languages

- [Čeština](https://cs.wikipedia.org/wiki/Objektov%C4%9B_orientovan%C3%A1_anal%C3%BDza_a_design "Objektově orientovaná analýza a design – Czech")
- [Dansk](https://da.wikipedia.org/wiki/Objektorienteret_analyse_og_design "Objektorienteret analyse og design – Danish")
- [Deutsch](https://de.wikipedia.org/wiki/Objektorientierte_Analyse_und_Design "Objektorientierte Analyse und Design – German")
- [Español](https://es.wikipedia.org/wiki/An%C3%A1lisis_y_dise%C3%B1o_orientado_a_objetos "Análisis y diseño orientado a objetos – Spanish")
- [فارسی](https://fa.wikipedia.org/wiki/%D8%B7%D8%B1%D8%A7%D8%AD%DB%8C_%D9%88_%D8%A2%D9%86%D8%A7%D9%84%DB%8C%D8%B2_%D8%B4%D8%A6%E2%80%8C%DA%AF%D8%B1%D8%A7 "طراحی و آنالیز شئ‌گرا – Persian")
- [Français](https://fr.wikipedia.org/wiki/M%C3%A9thode_d%27analyse_et_de_conception_d%27applications_orient%C3%A9es_objet "Méthode d'analyse et de conception d'applications orientées objet – French")
- [Magyar](https://hu.wikipedia.org/wiki/Objektumorient%C3%A1lt_elemz%C3%A9s_%C3%A9s_tervez%C3%A9s "Objektumorientált elemzés és tervezés – Hungarian")
- [Nederlands](https://nl.wikipedia.org/wiki/Objectgeori%C3%ABnteerde_analyse "Objectgeoriënteerde analyse – Dutch")
- [日本語](https://ja.wikipedia.org/wiki/%E3%82%AA%E3%83%96%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E6%8C%87%E5%90%91%E5%88%86%E6%9E%90%E8%A8%AD%E8%A8%88 "オブジェクト指向分析設計 – Japanese")
- [Русский](https://ru.wikipedia.org/wiki/%D0%9E%D0%B1%D1%8A%D0%B5%D0%BA%D1%82%D0%BD%D0%BE-%D0%BE%D1%80%D0%B8%D0%B5%D0%BD%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D0%BE%D0%B5_%D0%BF%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5 "Объектно-ориентированное проектирование – Russian")
- [Türkçe](https://tr.wikipedia.org/wiki/Nesne_y%C3%B6nelimli_%C3%A7%C3%B6z%C3%BCmleme_ve_tasar%C4%B1m "Nesne yönelimli çözümleme ve tasarım – Turkish")
- [Українська](https://uk.wikipedia.org/wiki/%D0%9E%D0%B1%27%D1%94%D0%BA%D1%82%D0%BD%D0%BE-%D0%BE%D1%80%D1%96%D1%94%D0%BD%D1%82%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B9_%D0%B4%D0%B8%D0%B7%D0%B0%D0%B9%D0%BD "Об'єктно-орієнтований дизайн – Ukrainian")
- [中文](https://zh.wikipedia.org/wiki/%E9%9D%A2%E5%90%91%E5%AF%B9%E8%B1%A1%E7%9A%84%E7%B3%BB%E7%BB%9F%E5%88%86%E6%9E%90 "面向对象的系统分析 – Chinese")

[Edit links](https://www.wikidata.org/wiki/Special:EntityPage/Q1237775#sitelinks-wikipedia "Edit interlanguage links")

- [Article](/wiki/Object-oriented_analysis_and_design "View the content page [c]")
- [Talk](/wiki/Talk:Object-oriented_analysis_and_design "Discuss improvements to the content page [t]")

English

- [Read](/wiki/Object-oriented_analysis_and_design)
- [Edit](/w/index.php?title=Object-oriented_analysis_and_design&action=edit "Edit this page [e]")
- [View history](/w/index.php?title=Object-oriented_analysis_and_design&action=history "Past revisions of this page [h]")

Tools

Tools

move to sidebarhide

Actions


- [Read](/wiki/Object-oriented_analysis_and_design)
- [Edit](/w/index.php?title=Object-oriented_analysis_and_design&action=edit "Edit this page [e]")
- [View history](/w/index.php?title=Object-oriented_analysis_and_design&action=history)

General


- [What links here](/wiki/Special:WhatLinksHere/Object-oriented_analysis_and_design "List of all English Wikipedia pages containing links to this page [j]")
- [Related changes](/wiki/Special:RecentChangesLinked/Object-oriented_analysis_and_design "Recent changes in pages linked from this page [k]")
- [Upload file](/wiki/Wikipedia:File_Upload_Wizard "Upload files [u]")
- [Special pages](/wiki/Special:SpecialPages "A list of all special pages [q]")
- [Permanent link](/w/index.php?title=Object-oriented_analysis_and_design&oldid=1230588445 "Permanent link to this revision of this page")
- [Page information](/w/index.php?title=Object-oriented_analysis_and_design&action=info "More information about this page")
- [Cite this page](/w/index.php?title=Special:CiteThisPage&page=Object-oriented_analysis_and_design&id=1230588445&wpFormIdentifier=titleform "Information on how to cite this page")
- [Get shortened URL](/w/index.php?title=Special:UrlShortener&url=https%3A%2F%2Fen.wikipedia.org%2Fwiki%2FObject-oriented_analysis_and_design)
- [Download QR code](/w/index.php?title=Special:QrCode&url=https%3A%2F%2Fen.wikipedia.org%2Fwiki%2FObject-oriented_analysis_and_design)
- [Wikidata item](https://www.wikidata.org/wiki/Special:EntityPage/Q1237775 "Structured data on this page hosted by Wikidata [g]")

Print/export


- [Download as PDF](/w/index.php?title=Special:DownloadAsPdf&page=Object-oriented_analysis_and_design&action=show-download-screen "Download this page as a PDF file")
- [Printable version](/w/index.php?title=Object-oriented_analysis_and_design&printable=yes "Printable version of this page [p]")

In other projects


- [Wikimedia Commons](https://commons.wikimedia.org/wiki/Category:Object-oriented_design)

Appearance

move to sidebarhide

From Wikipedia, the free encyclopedia

(Redirected from [OOAD](/w/index.php?title=OOAD&redirect=no "OOAD"))

Software development methodology

[![](//upload.wikimedia.org/wikipedia/en/thumb/9/99/Question_book-new.svg/50px-Question_book-new.svg.png)](/wiki/File:Question_book-new.svg)

This article **needs additional citations for [verification](/wiki/Wikipedia:Verifiability "Wikipedia:Verifiability")**. Please help [improve this article](/wiki/Special:EditPage/Object-oriented_analysis_and_design "Special:EditPage/Object-oriented analysis and design") by [adding citations to reliable sources](/wiki/Help:Referencing_for_beginners "Help:Referencing for beginners"). Unsourced material may be challenged and removed.

_Find sources:_ ["Object-oriented analysis and design"](https://www.google.com/search?as_eq=wikipedia&q=%22Object-oriented+analysis+and+design%22) – [news](https://www.google.com/search?tbm=nws&q=%22Object-oriented+analysis+and+design%22+-wikipedia&tbs=ar:1) **·** [newspapers](https://www.google.com/search?&q=%22Object-oriented+analysis+and+design%22&tbs=bkt:s&tbm=bks) **·** [books](https://www.google.com/search?tbs=bks:1&q=%22Object-oriented+analysis+and+design%22+-wikipedia) **·** [scholar](https://scholar.google.com/scholar?q=%22Object-oriented+analysis+and+design%22) **·** [JSTOR](https://www.jstor.org/action/doBasicSearch?Query=%22Object-oriented+analysis+and+design%22&acc=on&wc=on)_(November 2019)__([Learn how and when to remove this message](/wiki/Help:Maintenance_template_removal "Help:Maintenance template removal"))_

**![](//upload.wikimedia.org/wikipedia/commons/thumb/5/53/Ambox_current_red_Americas.svg/42px-Ambox_current_red_Americas.svg.png)**

**Parts of this article (those related to article) need to be updated **. Please help update this article to reflect recent events or newly available information._(July 2023)_****Part of a series on[Software development](/wiki/Software_development "Software development")

Core activities

- [Data modeling](/wiki/Data_modeling "Data modeling")
- [Processes](/wiki/Software_development_process "Software development process")
- [Requirements](/wiki/Requirements_analysis "Requirements analysis")
- [Design](/wiki/Software_design "Software design")
- [Construction](/wiki/Software_construction "Software construction")
- [Engineering](/wiki/Software_engineering "Software engineering")
- [Testing](/wiki/Software_testing "Software testing")
- [Debugging](/wiki/Debugging "Debugging")
- [Deployment](/wiki/Software_deployment "Software deployment")
- [Maintenance](/wiki/Software_maintenance "Software maintenance")

Paradigms and models

- [Agile](/wiki/Agile_software_development "Agile software development")
- [Cleanroom](/wiki/Cleanroom_software_engineering "Cleanroom software engineering")
- [Incremental](/wiki/Incremental_build_model "Incremental build model")
- [Prototyping](/wiki/Software_prototyping "Software prototyping")
- [Spiral](/wiki/Spiral_model "Spiral model")
- [V model](/wiki/V-model_(software_development) "V-model (software development)")
- [Waterfall](/wiki/Waterfall_model "Waterfall model")

[Methodologies](/wiki/Software_development_methodology "Software development methodology") and frameworks

- [ASD](/wiki/Adaptive_software_development "Adaptive software development")
- [DevOps](/wiki/DevOps "DevOps")
- [DAD](/wiki/Disciplined_agile_delivery "Disciplined agile delivery")
- [DSDM](/wiki/Dynamic_systems_development_method "Dynamic systems development method")
- [FDD](/wiki/Feature-driven_development "Feature-driven development")
- [IID](/wiki/Iterative_and_incremental_development "Iterative and incremental development")
- [Kanban](/wiki/Kanban_(development) "Kanban (development)")
- [Lean SD](/wiki/Lean_software_development "Lean software development")
- [LeSS](/wiki/Scrum_(software_development)#Large-scale_Scrum "Scrum (software development)")
- [MDD](/wiki/Model-driven_development "Model-driven development")
- [MSF](/wiki/Microsoft_Solutions_Framework "Microsoft Solutions Framework")
- [PSP](/wiki/Personal_software_process "Personal software process")
- [RAD](/wiki/Rapid_application_development "Rapid application development")
- [RUP](/wiki/Rational_Unified_Process "Rational Unified Process")
- [SAFe](/wiki/Scaled_agile_framework "Scaled agile framework")
- [Scrum](/wiki/Scrum_(software_development) "Scrum (software development)")
- [SEMAT](/wiki/SEMAT "SEMAT")
- [TDD](/wiki/Test-driven_development "Test-driven development")
- [TSP](/wiki/Team_software_process "Team software process")
- [UP](/wiki/Unified_Process "Unified Process")
- [XP](/wiki/Extreme_programming "Extreme programming")

Supporting disciplines

- [Configuration management](/wiki/Software_configuration_management "Software configuration management")
- [Deployment management](/wiki/Deployment_management#Computer_science "Deployment management")
- [Documentation](/wiki/Software_documentation "Software documentation")
- [Software quality assurance](/wiki/Software_quality_assurance "Software quality assurance")
- [Project management](/wiki/Software_project_management "Software project management")
- [User experience](/wiki/User_experience "User experience")

Practices

- [ATDD](/wiki/Acceptance_test%E2%80%93driven_development "Acceptance test–driven development")
- [BDD](/wiki/Behavior-driven_development "Behavior-driven development")
- [CCO](/wiki/Extreme_programming_practices#Collective_code_ownership "Extreme programming practices")
- [CI](/wiki/Continuous_integration "Continuous integration")
- [CD](/wiki/Continuous_delivery "Continuous delivery")
- [DDD](/wiki/Domain-driven_design "Domain-driven design")
- [PP](/wiki/Pair_programming "Pair programming")
- [SBE](/wiki/Specification_by_example "Specification by example")
- [Stand-up](/wiki/Stand-up_meeting "Stand-up meeting")
- [TDD](/wiki/Test-driven_development "Test-driven development")

[Tools](/wiki/Programming_tool "Programming tool")

- [Compiler](/wiki/Compiler "Compiler")
- [Debugger](/wiki/Debugger "Debugger")
- [Profiler](/wiki/Profiling_(computer_programming) "Profiling (computer programming)")
- [GUI designer](/wiki/Graphical_user_interface_builder "Graphical user interface builder")
- [UML Modeling](/wiki/UML_tool "UML tool")
- [IDE](/wiki/Integrated_development_environment "Integrated development environment")
- [Build automation](/wiki/Build_automation "Build automation")
- [Release automation](/wiki/Application-release_automation "Application-release automation")
- [Infrastructure as code](/wiki/Infrastructure_as_code "Infrastructure as code")

Standards and bodies of knowledge

- [CMMI](/wiki/Capability_Maturity_Model_Integration "Capability Maturity Model Integration")
- [IEEE standards](/wiki/IEEE_Standards_Association "IEEE Standards Association")
- [ISO 9001](/wiki/ISO_9001 "ISO 9001")
- [ISO/IEC standards](/wiki/ISO/IEC_JTC_1/SC_7 "ISO/IEC JTC 1/SC 7")
- [PMBOK](/wiki/Project_Management_Body_of_Knowledge "Project Management Body of Knowledge")
- [SWEBOK](/wiki/Software_Engineering_Body_of_Knowledge "Software Engineering Body of Knowledge")
- [ITIL](/wiki/ITIL "ITIL")
- [IREB](/wiki/International_Requirements_Engineering_Board "International Requirements Engineering Board")
- [OMG](/wiki/Object_Management_Group "Object Management Group")

Glossaries

- [Artificial intelligence](/wiki/Glossary_of_artificial_intelligence "Glossary of artificial intelligence")
- [Computer science](/wiki/Glossary_of_computer_science "Glossary of computer science")
- [Electrical and electronics engineering](/wiki/Glossary_of_electrical_and_electronics_engineering "Glossary of electrical and electronics engineering")

Outlines

- [Outline of software development](/wiki/Outline_of_software_development "Outline of software development")

- [v](/wiki/Template:Software_development_process "Template:Software development process")
- [t](/wiki/Template_talk:Software_development_process "Template talk:Software development process")
- [e](/wiki/Special:EditPage/Template:Software_development_process "Special:EditPage/Template:Software development process")

**Object-oriented analysis and design** ( **OOAD**) is a technical approach for analyzing and designing an application, system, or business by applying [object-oriented programming](/wiki/Object-oriented_programming "Object-oriented programming"), as well as using visual modeling throughout the [software development process](/wiki/Software_development_process "Software development process") to guide stakeholder communication and product quality.

OOAD in modern software engineering is typically conducted in an iterative and incremental way. The outputs of OOAD activities are analysis models (for OOA) and design models (for OOD) respectively. The intention is for these to be continuously refined and evolved, driven by key factors like risks and business value.

## History

\[ [edit](/w/index.php?title=Object-oriented_analysis_and_design&action=edit&section=1 "Edit section: History")\]

In the early days of object-oriented technology before the mid-1990s, there were many different competing methodologies for software development and [object-oriented modeling](/wiki/Object-oriented_modeling "Object-oriented modeling"), often tied to specific [Computer Aided Software Engineering](/wiki/Computer_Aided_Software_Engineering "Computer Aided Software Engineering") (CASE) tool vendors. No standard notations, consistent terms and process guides were the major concerns at the time, which degraded [communication efficiency](/w/index.php?title=Communication_efficiency&action=edit&redlink=1 "Communication efficiency (page does not exist)") and lengthened learning curves.

Some of the well-known early object-oriented methodologies were from and inspired by gurus such as [Grady Booch](/wiki/Grady_Booch "Grady Booch"), [James Rumbaugh](/wiki/James_Rumbaugh "James Rumbaugh"), [Ivar Jacobson](/wiki/Ivar_Jacobson "Ivar Jacobson") (the _Three Amigos_), [Robert Martin](/wiki/Robert_Cecil_Martin "Robert Cecil Martin"), [Peter Coad](/wiki/Peter_Coad "Peter Coad"), [Sally Shlaer](/wiki/Sally_Shlaer "Sally Shlaer"), [Stephen Mellor](/wiki/Stephen_J._Mellor "Stephen J. Mellor"), and [Rebecca Wirfs-Brock](/wiki/Rebecca_Wirfs-Brock "Rebecca Wirfs-Brock").

In 1994, the _Three Amigos_ of Rational Software started working together to develop the [Unified Modeling Language](/wiki/Unified_Modeling_Language "Unified Modeling Language") (UML). Later, together with [Philippe Kruchten](/wiki/Philippe_Kruchten "Philippe Kruchten") and Walker Royce (eldest son of [Winston Royce](/wiki/Winston_Royce "Winston Royce")), they have led a successful mission to merge their own methodologies, [OMT](/wiki/Object-modeling_technique "Object-modeling technique"), [OOSE](/wiki/Object-oriented_software_engineering "Object-oriented software engineering") and [Booch method](/wiki/Booch_method "Booch method"), with various insights and experiences from other industry leaders into the [Rational Unified Process](/wiki/IBM_Rational_Unified_Process "IBM Rational Unified Process") (RUP), a comprehensive iterative and incremental process guide and framework for learning industry best practices of software development and project management.[\[1\]](#cite_note-1) Since then, the [Unified Process](/wiki/Unified_Process "Unified Process") family has become probably the most popular methodology and reference model for object-oriented analysis and design.

## Overview

\[ [edit](/w/index.php?title=Object-oriented_analysis_and_design&action=edit&section=2 "Edit section: Overview")\]

![](//upload.wikimedia.org/wikipedia/en/thumb/f/f2/Edit-clear.svg/40px-Edit-clear.svg.png)

This section may **require [cleanup](/wiki/Wikipedia:Cleanup "Wikipedia:Cleanup")** to meet Wikipedia's [quality standards](/wiki/Wikipedia:Manual_of_Style "Wikipedia:Manual of Style"). The specific problem is: **remove duplications, shorten the waterfall descriptions, and make the statements more concise.** Please help [improve this section](/wiki/Special:EditPage/Object-oriented_analysis_and_design "Special:EditPage/Object-oriented analysis and design") if you can._(January 2014)__([Learn how and when to remove this message](/wiki/Help:Maintenance_template_removal "Help:Maintenance template removal"))_

An [object](/wiki/Object_(computer_science) "Object (computer science)") contains [encapsulated](/wiki/Encapsulation_(computer_programming) "Encapsulation (computer programming)") data and procedures grouped to represent an entity. The 'object interface' defines how the [object](/wiki/Object_(computer_science) "Object (computer science)") can be interacted with. An object-oriented program is described by the interaction of these objects. Object-oriented design is the discipline of defining the [objects](/wiki/Object_(computer_science) "Object (computer science)") and their interactions to solve a problem that was identified and documented during object-oriented analysis.

What follows is a description of the [class-based](/wiki/Class-based_programming "Class-based programming") subset of object-oriented design, which does not include [object prototype-based](/wiki/Prototype-based_programming "Prototype-based programming") approaches where objects are not typically obtained by instantiating classes but by cloning other (prototype) objects. Object-oriented design is a method of design encompassing the process of object-oriented decomposition and a notation for depicting both logical and physical as well as state and dynamic models of the system under design.

The [software life cycle](/wiki/Software_release_life_cycle "Software release life cycle") is typically divided up into stages, going from abstract descriptions of the problem, to designs, then to code and testing, and finally to deployment. The earliest stages of this process are analysis and design. The analysis phase is also often called "requirements acquisition".

[![](//upload.wikimedia.org/wikipedia/commons/thumb/b/bf/Waterfall_model_revised.svg/350px-Waterfall_model_revised.svg.png)](/wiki/File:Waterfall_model_revised.svg) The [Waterfall Model](/wiki/Waterfall_Model "Waterfall Model").[![](//upload.wikimedia.org/wikipedia/commons/thumb/1/19/Development-iterative.png/350px-Development-iterative.png)](/wiki/File:Development-iterative.png) OOAD is conducted in an iterative and incremental manner, as formulated by the [Unified Process](/wiki/Unified_Process "Unified Process").

In some approaches to software development—known collectively as waterfall models—the boundaries between each stage are meant to be fairly rigid and sequential. The term "waterfall" was coined for such methodologies to signify that progress went sequentially in one direction only, i.e., once analysis was complete then and only then was design begun and it was rare (and considered a source of error) when a design issue required a change in the analysis model or when a coding issue required a change in design.

The alternative to waterfall models are iterative models. This distinction was popularized by [Barry Boehm](/wiki/Barry_Boehm "Barry Boehm") in a very influential paper on his Spiral Model for iterative software development. With iterative models it is possible to do work in various stages of the model in parallel. So for example it is possible—and not seen as a source of error—to work on analysis, design, and even code all on the same day and to have issues from one stage impact issues from another. The emphasis on iterative models is that software development is a knowledge-intensive process and that things like analysis can't really be completely understood without understanding design issues, that coding issues can affect design, that testing can yield information about how the code or even the design should be modified, etc.[\[2\]](#cite_note-2)

Although it is possible to do object-oriented development using a waterfall model, in practice most object-oriented systems are developed with an iterative approach. As a result, in object-oriented processes "analysis and design" are often considered at the same time.

The object-oriented paradigm emphasizes modularity and re-usability. The goal of an object-oriented approach is to satisfy the ["open–closed principle"](/wiki/Open_Closed_Principle "Open Closed Principle"). A module is open if it supports extension, or if the module provides standardized ways to add new behaviors or describe new states. In the object-oriented paradigm this is often accomplished by creating a new subclass of an existing class. A module is closed if it has a well defined stable interface that all other modules must use and that limits the interaction and potential errors that can be introduced into one module by changes in another. In the object-oriented paradigm this is accomplished by defining methods that invoke services on objects. Methods can be either public or private, i.e., certain behaviors that are unique to the object are not exposed to other objects. This reduces a source of many common errors in computer programming.[\[3\]](#cite_note-3)

The software life cycle is typically divided up into stages going from abstract descriptions of the problem to designs then to code and testing and finally to deployment. The earliest stages of this process are analysis and design. The distinction between analysis and design is often described as "what vs. how". In analysis developers work with users and domain experts to define what the system is supposed to do. Implementation details are supposed to be mostly or totally (depending on the particular method) ignored at this phase. The goal of the analysis phase is to create a functional model of the system regardless of constraints such as appropriate technology. In object-oriented analysis this is typically done via use cases and abstract definitions of the most important objects. The subsequent design phase refines the analysis model and makes the needed technology and other implementation choices. In object-oriented design the emphasis is on describing the various objects, their data, behavior, and interactions. The design model should have all the details required so that programmers can implement the design in code.[\[4\]](#cite_note-4)

## Object-oriented analysis

\[ [edit](/w/index.php?title=Object-oriented_analysis_and_design&action=edit&section=3 "Edit section: Object-oriented analysis")\]

The purpose of any analysis activity in the [software life-cycle](/wiki/Software_development_process "Software development process") is to create a model of the system's functional requirements that is independent of implementation constraints.

The main difference between object-oriented analysis and other forms of analysis is that by the object-oriented approach we organize requirements around objects, which integrate both behaviors (processes) and states (data) modeled after real world objects that the system interacts with. In other or traditional analysis methodologies, the two aspects: processes and data are considered separately. For example, data may be modeled by [ER diagrams](/wiki/Entity-relationship_model "Entity-relationship model"), and behaviors by [flow charts](/wiki/Flowchart "Flowchart") or [structure charts](/wiki/Structure_chart "Structure chart").

Common models used in OOA are use cases and [object models](/wiki/Object_model "Object model"). [Use cases](/wiki/Use_case "Use case") describe scenarios for standard domain functions that the system must accomplish. Object models describe the names, class relations (e.g. Circle is a subclass of Shape), operations, and properties of the main objects. User-interface mockups or prototypes can also be created to help understanding.[\[5\]](#cite_note-5)

## Object-oriented design

\[ [edit](/w/index.php?title=Object-oriented_analysis_and_design&action=edit&section=4 "Edit section: Object-oriented design")\]

**Object-oriented design (OOD)** is the process of planning a [system of interacting objects](/wiki/Object-oriented_programming "Object-oriented programming") to solve a software problem. It is a method for [software design](/wiki/Software_design "Software design"). By defining classes and their functionality for their children (instantiated objects), each object can run the same implementation of the class with its state.

During OOD, a developer applies implementation constraints to the conceptual model produced in object-oriented analysis. Such constraints could include the hardware and [software](/wiki/Software "Software") platforms, the performance requirements, persistent storage and transaction, usability of the system, and limitations imposed by budgets and time. Concepts in the analysis model which is technology independent, are mapped onto implementing classes and interfaces resulting in a model of the solution domain, i.e., a detailed description of _how_ the system is to be built on concrete technologies.[\[6\]](#cite_note-6)

Important topics during OOD also include the design of [software architectures](/wiki/Software_architecture "Software architecture") by applying [architectural patterns](/wiki/Architectural_pattern "Architectural pattern") and [design patterns](/wiki/Design_patterns "Design patterns") with the object-oriented design principles.

### Input (sources) for object-oriented design

\[ [edit](/w/index.php?title=Object-oriented_analysis_and_design&action=edit&section=5 "Edit section: Input (sources) for object-oriented design")\]

The input for object-oriented design is provided by the output of object-oriented analysis. Realize that an output artifact does not need to be completely developed to serve as input of object-oriented design; analysis and design may occur in parallel, and in practice, the results of one activity can feed the other in a short feedback cycle through an iterative process. Both analysis and design can be performed incrementally, and the artifacts can be continuously grown instead of completely developed in one shot.

Some typical input artifacts for object-oriented design are:

- [Conceptual model](/wiki/Conceptual_model_(computer_science) "Conceptual model (computer science)"): The result of object-oriented analysis, captures concepts in the [problem domain](/wiki/Domain_(software_engineering) "Domain (software engineering)"). The conceptual model is explicitly chosen to be independent of implementation details, such as [concurrency](/wiki/Concurrency_(computer_science) "Concurrency (computer science)") or data storage.
- [Use case](/wiki/Use_case "Use case"): A description of sequences of events that, taken together, lead to a system doing something useful. Each use case provides one or more [scenarios](/wiki/Scenario_(computing) "Scenario (computing)") that convey how the system should interact with the users called actors to achieve a specific business goal or function. Use case actors may be end users or other systems. In many circumstances use cases are further elaborated into [use case diagrams](/wiki/Use_case_diagram "Use case diagram"). Use case diagrams are used to identify the actor (users or other systems) and the processes they perform.
- [System sequence diagram](/wiki/System_sequence_diagram "System sequence diagram"): A system sequence diagram (SSD) is a picture that shows, for a particular scenario of a use case, the events that external actors generate, their order, and possible inter-system events.
- [User interface](/wiki/User_interface "User interface") documentation (if applicable): Document that shows and describes the [look and feel](/wiki/Look_and_feel "Look and feel") of the end product's user interface. It is not mandatory to have this, but it helps to visualize the end product and therefore helps the designer.
- [Relational data model](/wiki/Relational_data_model "Relational data model") (if applicable): A data model is an abstract model that describes how data is represented and used. If an [object database](/wiki/Object_database "Object database") is not used, the relational data model should usually be created before the design since the strategy chosen for [object-relational mapping](/wiki/Object-relational_mapping "Object-relational mapping") is an output of the OO design process. However, it is possible to develop the relational data model and the object-oriented design artifacts in parallel, and the growth of an artifact can stimulate the refinement of other artifacts.

### Object-oriented concepts

\[ [edit](/w/index.php?title=Object-oriented_analysis_and_design&action=edit&section=6 "Edit section: Object-oriented concepts")\]

The five basic concepts of object-oriented design are the implementation-level features built into the programming language. These features are often referred to by these common names:

- [Object/Class](/wiki/Object_(computer_science) "Object (computer science)"): A tight coupling or association of data structures with the methods or functions that act on the data. This is called a _class_, or _object_ (an object is created based on a class). Each object serves a separate function. It is defined by its properties, what it is and what it can do. An object can be part of a class, which is a set of similar objects.
- [Information hiding](/wiki/Information_hiding "Information hiding"): The ability to protect some object components from external entities. This is realized by language keywords to enable a variable to be declared as _private_ or _protected_ to the owning _class_.
- [Inheritance](/wiki/Inheritance_(object-oriented_programming) "Inheritance (object-oriented programming)"): The ability for a _class_ to extend or override the functionality of another _class_. The so-called _subclass_ has a whole section derived (inherited) from the _superclass_ and has its own set of functions and data.
- [Interface (object-oriented programming)](/wiki/Interface_(object-oriented_programming) "Interface (object-oriented programming)"): The ability to defer the implementation of a _method_. The ability to define the _functions_ or _methods_ signatures without implementing them.
- [Polymorphism](/wiki/Polymorphism_(computer_science) "Polymorphism (computer science)") (specifically, [Subtyping](/wiki/Subtyping "Subtyping")): The ability to replace an _object_ with its _sub-objects_. The ability of an _object-variable_ to contain not only that _object_ but also all of its _sub-objects_.

### Designing concepts

\[ [edit](/w/index.php?title=Object-oriented_analysis_and_design&action=edit&section=7 "Edit section: Designing concepts")\]

- Defining objects, creating [class diagram](/wiki/Class_diagram "Class diagram") from [conceptual diagram](/wiki/Conceptual_model_(computer_science) "Conceptual model (computer science)"): Usually map entity to class.
- Identifying [attributes](/wiki/Attribute_(computing) "Attribute (computing)") and their models.
- Use [design patterns](/wiki/Design_pattern "Design pattern") (if applicable): A design pattern is not a finished design, it is a description of a solution to a common problem, in a context.[\[7\]](#cite_note-gof-7)

The main advantage of using a design pattern is that it can be reused in multiple applications. It can also be thought of as a template for how to solve a problem that can be used in many different situations and/or applications. Object-oriented design patterns typically show relationships and interactions between classes or objects, without specifying the final application classes or objects involved.

- Define [application framework](/wiki/Application_framework "Application framework") (if applicable): An application framework is usually a set of libraries or classes that are used to implement the standard structure of an application for a specific operating system. By bundling a large amount of reusable code into a framework, much time is saved for the developer since he/she is saved the task of rewriting large amounts of standard code for each new application that is developed.
- Identify persistent objects/data (if applicable): Identify objects that have to last longer than a single runtime of the application. Design the object relation mapping if a [relational database](/wiki/Relational_database "Relational database") is used.
- Identify and define remote objects (if applicable) and their variations.

### Output (deliverables) of object-oriented design

\[ [edit](/w/index.php?title=Object-oriented_analysis_and_design&action=edit&section=8 "Edit section: Output (deliverables) of object-oriented design")\]

- [Sequence diagram](/wiki/Sequence_diagram "Sequence diagram") \- Extend the [system sequence diagram](/wiki/System_sequence_diagram "System sequence diagram") to add specific objects that handle the system events.

A sequence diagram shows, as parallel vertical lines, different processes or objects that live simultaneously, and, as horizontal arrows, the messages exchanged between them, in the order in which they occur.

- [Class diagram](/wiki/Class_diagram "Class diagram") \- A class diagram is a type of static structure [UML](/wiki/Unified_Modeling_Language "Unified Modeling Language") diagram that describes the structure of a system by showing the system's classes, its attributes, and the relationships between the classes. The messages and classes identified through the development of the sequence diagrams can serve as input to the automatic generation of the global class diagram of the system.

### Some design principles and strategies

\[ [edit](/w/index.php?title=Object-oriented_analysis_and_design&action=edit&section=9 "Edit section: Some design principles and strategies")\]

- [Dependency injection](/wiki/Dependency_injection "Dependency injection"): The basic idea is that if an object depends upon having an instance of some other object then the needed object is "injected" into the dependent object; for example, being passed a database connection as an argument to the [constructor](/wiki/Constructor_(object-oriented_programming) "Constructor (object-oriented programming)") instead of creating one internally.
- [Acyclic dependencies principle](/wiki/Acyclic_dependencies_principle "Acyclic dependencies principle"): The dependency graph of packages or components (the granularity depends on the scope of work for one developer) should have no cycles. This is also referred to as having a [directed acyclic graph](/wiki/Directed_acyclic_graph "Directed acyclic graph").[\[8\]](#cite_note-objectMentor-8) For example, package C depends on package B, which depends on package A. If package A depended on package C, you would have a cycle.
- [Composite reuse principle](/wiki/Composite_reuse_principle "Composite reuse principle"): Favor [polymorphic](/wiki/Polymorphism_(computer_science) "Polymorphism (computer science)") [composition](/wiki/Object_composition "Object composition") of objects over inheritance.[\[7\]](#cite_note-gof-7)

## Object-oriented modeling

\[ [edit](/w/index.php?title=Object-oriented_analysis_and_design&action=edit&section=10 "Edit section: Object-oriented modeling")\]

Main article: [Object-oriented modeling](/wiki/Object-oriented_modeling "Object-oriented modeling")

Object-oriented modeling (OOM) is a common approach to modeling applications, systems, and business domains by using the object-oriented paradigm throughout the entire [development life cycles](/wiki/Software_development_process "Software development process"). OOM is a main technique heavily used by both OOD and OOA activities in modern software engineering.

Object-oriented modeling typically divides into two aspects of work: the modeling of dynamic behaviors like business processes and [use cases](/wiki/Use_cases "Use cases"), and the modeling of static structures like classes and components. OOA and OOD are the two distinct abstract levels (i.e. the analysis level and the design level) during OOM. The [Unified Modeling Language (UML)](/wiki/Unified_Modeling_Language "Unified Modeling Language") and [SysML](/wiki/SysML "SysML") are the two popular international standard languages used for object-oriented modeling.[\[9\]](#cite_note-9)

The benefits of OOM are:

**Efficient and effective communication**

Users typically have difficulties in understanding comprehensive documents and programming language codes well. Visual model diagrams can be more understandable and can allow users and stakeholders to give developers feedback on the appropriate requirements and structure of the system. A key goal of the object-oriented approach is to decrease the "semantic gap" between the system and the real world, and to have the system be constructed using terminology that is almost the same as the stakeholders use in everyday business. Object-oriented modeling is an essential tool to facilitate this.

**Useful and stable abstraction**

Modeling helps coding. A goal of most modern software methodologies is to first address "what" questions and then address "how" questions, i.e. first determine the functionality the system is to provide without consideration of implementation constraints, and then consider how to make specific solutions to these abstract requirements, and refine them into detailed designs and codes by constraints such as technology and budget. Object-oriented modeling enables this by producing abstract and accessible descriptions of both system requirements and designs, i.e. _models_ that define their essential structures and behaviors like processes and objects, which are important and valuable development assets with higher abstraction levels above concrete and complex source code.

## See also

\[ [edit](/w/index.php?title=Object-oriented_analysis_and_design&action=edit&section=11 "Edit section: See also")\]

- [ATLAS Transformation Language](/wiki/ATLAS_Transformation_Language "ATLAS Transformation Language") (ATL)
- [Class-Responsibility-Collaboration card](/wiki/Class-Responsibility-Collaboration_card "Class-Responsibility-Collaboration card") (CRC cards)
- [Domain Specific Language](/wiki/Domain_Specific_Language "Domain Specific Language") (DSL)
- [Domain-driven design](/wiki/Domain-driven_design "Domain-driven design")
- [Domain-specific modelling](/wiki/Domain-specific_modelling "Domain-specific modelling") (DSM)
- [GRASP (object-oriented design)](/wiki/GRASP_(object-oriented_design) "GRASP (object-oriented design)")
- [IDEF4](/wiki/IDEF4 "IDEF4")
- [Meta-Object Facility](/wiki/Meta-Object_Facility "Meta-Object Facility") (MOF)
- [Metamodeling](/wiki/Metamodeling "Metamodeling")
- [Model-driven engineering](/wiki/Model-driven_engineering "Model-driven engineering") (MDE)
- [Model-based testing](/wiki/Model-based_testing "Model-based testing") (MBT)
- [Object modeling language](/wiki/Object_modeling_language "Object modeling language")
- [Object-oriented modeling](/wiki/Object-oriented_modeling "Object-oriented modeling")
- [Object-oriented programming](/wiki/Object-oriented_programming "Object-oriented programming")
- [Object-oriented user interface](/wiki/Object-oriented_user_interface "Object-oriented user interface")
- [QVT](/wiki/QVT "QVT")
- [Shlaer-Mellor](/wiki/Shlaer-Mellor "Shlaer-Mellor")
- [Software analysis pattern](/wiki/Software_analysis_pattern "Software analysis pattern")
- [SOLID](/wiki/SOLID "SOLID")
- [Story-driven modeling](/wiki/Story-driven_modeling "Story-driven modeling")
- [Unified Modeling Language](/wiki/Unified_Modeling_Language "Unified Modeling Language") (UML)
- [XML Metadata Interchange](/wiki/XML_Metadata_Interchange "XML Metadata Interchange") (XMI)

## References

\[ [edit](/w/index.php?title=Object-oriented_analysis_and_design&action=edit&section=12 "Edit section: References")\]

1. **[^](#cite_ref-1)**["Rational Unified Process Best Practices for Software Development Teams"](http://www.ibm.com/developerworks/rational/library/content/03July/1000/1251/1251_bestpractices_TP026B.pdf)(PDF). _Rational Software White Paper_ (TP026B). 1998. Retrieved 12 December 2013.
2. **[^](#cite_ref-2)**Boehm B, ["A Spiral Model of Software Development and Enhancement](http://csse.usc.edu/csse/TECHRPTS/1988/usccse88-500/usccse88-500.pdf)", IEEE Computer, IEEE, 21(5):61-72, May 1988
3. **[^](#cite_ref-3)**Meyer, Bertrand (1988). _Object-Oriented Software Construction_. Cambridge: Prentise Hall International Series in Computer Science. p. 23. [ISBN](/wiki/ISBN_(identifier) "ISBN (identifier)") [0-13-629049-3](/wiki/Special:BookSources/0-13-629049-3 "Special:BookSources/0-13-629049-3").
4. **[^](#cite_ref-4)**Jacobsen, Ivar; Magnus Christerson; Patrik Jonsson; Gunnar Overgaard (1992). [_Object Oriented Software Engineering_](https://archive.org/details/objectorientedso00jaco/page/15). Addison-Wesley ACM Press. pp. [15, 199](https://archive.org/details/objectorientedso00jaco/page/15). [ISBN](/wiki/ISBN_(identifier) "ISBN (identifier)") [0-201-54435-0](/wiki/Special:BookSources/0-201-54435-0 "Special:BookSources/0-201-54435-0").
5. **[^](#cite_ref-5)**Jacobsen, Ivar; Magnus Christerson; Patrik Jonsson; Gunnar Overgaard (1992). [_Object Oriented Software Engineering_](https://archive.org/details/objectorientedso00jaco/page/77). Addison-Wesley ACM Press. pp. [77–79](https://archive.org/details/objectorientedso00jaco/page/77). [ISBN](/wiki/ISBN_(identifier) "ISBN (identifier)") [0-201-54435-0](/wiki/Special:BookSources/0-201-54435-0 "Special:BookSources/0-201-54435-0").
6. **[^](#cite_ref-6)**Conallen, Jim (2000). [_Building Web Applications with UML_](https://archive.org/details/buildingwebappli00cona/page/147). Addison Wesley. p. [147](https://archive.org/details/buildingwebappli00cona/page/147). [ISBN](/wiki/ISBN_(identifier) "ISBN (identifier)") [0201615770](/wiki/Special:BookSources/0201615770 "Special:BookSources/0201615770").
7. ^ [_**a**_](#cite_ref-gof_7-0) [_**b**_](#cite_ref-gof_7-1)[Erich Gamma](/wiki/Erich_Gamma "Erich Gamma"); [Richard Helm](/wiki/Richard_Helm "Richard Helm"); [Ralph Johnson](/wiki/Ralph_Johnson_(computer_scientist) "Ralph Johnson (computer scientist)"); [John Vlissides](/wiki/John_Vlissides "John Vlissides") (January 2, 1995). [_Design Patterns: Elements of Reusable Object-Oriented Software_](https://dl.acm.org/doi/10.5555/186897). [Addison-Wesley](/wiki/Addison-Wesley "Addison-Wesley"). [ISBN](/wiki/ISBN_(identifier) "ISBN (identifier)") [978-0-201-63361-0](/wiki/Special:BookSources/978-0-201-63361-0 "Special:BookSources/978-0-201-63361-0").
8. **[^](#cite_ref-objectMentor_8-0)**["What Is Object-Oriented Design?"](https://web.archive.org/web/20070630045531/http://www.objectmentor.com/omSolutions/oops_what.html). Object Mentor. Archived from [the original](http://www.objectmentor.com/omSolutions/oops_what.html) on 2007-06-30. Retrieved 2007-07-03.
9. **[^](#cite_ref-9)**Jacobsen, Ivar; Magnus Christerson; Patrik Jonsson; Gunnar Overgaard (1992). [_Object Oriented Software Engineering_](https://archive.org/details/objectorientedso00jaco/page/15). Addison-Wesley ACM Press. pp. [15, 199](https://archive.org/details/objectorientedso00jaco/page/15). [ISBN](/wiki/ISBN_(identifier) "ISBN (identifier)") [0-201-54435-0](/wiki/Special:BookSources/0-201-54435-0 "Special:BookSources/0-201-54435-0").

## Further reading

\[ [edit](/w/index.php?title=Object-oriented_analysis_and_design&action=edit&section=13 "Edit section: Further reading")\]

- [Grady Booch](/wiki/Grady_Booch "Grady Booch"). "Object-oriented Analysis and Design with Applications, 3rd edition": [http://www.informit.com/store/product.aspx?isbn=020189551X](http://www.informit.com/store/product.aspx?isbn=020189551X) Addison-Wesley 2007.
- [Rebecca Wirfs-Brock](/wiki/Rebecca_Wirfs-Brock "Rebecca Wirfs-Brock"), Brian Wilkerson, Lauren Wiener. _Designing Object Oriented Software_. Prentice Hall, 1990. \[ _A down-to-earth introduction to the object-oriented programming and design._\]
- [A Theory of Object-Oriented Design](https://web.archive.org/web/20070928035622/http://www.eden-study.org/articles/2002/isf4(4).pdf): The building-blocks of OOD and notations for representing them (with focus on design patterns.)
- [Martin Fowler](/wiki/Martin_Fowler_(software_engineer) "Martin Fowler (software engineer)"). _Analysis Patterns: Reusable Object Models_. Addison-Wesley, 1997. \[ _An introduction to object-oriented analysis with conceptual models_\]
- [Bertrand Meyer](/wiki/Bertrand_Meyer "Bertrand Meyer"). _Object-oriented software construction_. Prentice Hall, 1997
- [Craig Larman](/wiki/Craig_Larman "Craig Larman"). _Applying UML and Patterns – Introduction to OOA/D & Iterative Development_. Prentice Hall PTR, 3rd ed. 2005.
- Setrag Khoshafian. _Object Orientation_.
- Ulrich Norbisrath, Albert Zündorf, Ruben Jubeh. _Story Driven Modeling_. Amazon Createspace. p. 333., 2013. [ISBN](/wiki/ISBN_(identifier) "ISBN (identifier)") [9781483949253](/wiki/Special:BookSources/9781483949253 "Special:BookSources/9781483949253").

## External links

\[ [edit](/w/index.php?title=Object-oriented_analysis_and_design&action=edit&section=14 "Edit section: External links")\]

![](//upload.wikimedia.org/wikipedia/commons/thumb/0/0b/Wikiversity_logo_2017.svg/40px-Wikiversity_logo_2017.svg.png)

Wikiversity has learning resources about _**[Object Oriented Software Design](https://en.wikiversity.org/wiki/Object_Oriented_Software_Design "v:Object Oriented Software Design")**_

- Article [Object-Oriented Analysis and Design with UML and RUP](http://www.beroux.com/english/articles/oop_uml_and_rup.php) an overview (also about CRC cards).
- Applying UML – [Object Oriented Analysis & Design](http://www.parlezuml.com/e-books/umlformanagers/umlformanagers_ch3.pdf) tutorial
- OOAD & UML Resource website and Forums – [Object Oriented Analysis & Design with UML](http://www.ooaduml.com).
- [Software Requirement Analysis using UML](https://www.slideshare.net/dhirajmusings/software-requirement-analysis-using-uml) article by Dhiraj Shetty.
- Article [Object-Oriented Analysis in the Real World](http://www.methodsandtools.com/archive/archive.php?id=77)
- [_Object-Oriented Analysis & Design_](http://www.parlezuml.com/e-books/umlformanagers/umlformanagers_ch3.pdf) \- overview using UML
- [Larman, Craig. _Applying UML and Patterns - Third Edition_](http://authors.phptr.com/larman/uml_ooad/index.html)
- [_Object-Oriented Analysis and Design_](http://www.informit.com/articles/article.aspx?p=360440&seqNum=8)
- [LePUS3 and Class-Z](http://www.lepus.org.uk): formal modelling languages for object-oriented design

- [v](/wiki/Template:Unified_Modeling_Language "Template:Unified Modeling Language")
- [t](/wiki/Template_talk:Unified_Modeling_Language "Template talk:Unified Modeling Language")
- [e](/wiki/Special:EditPage/Template:Unified_Modeling_Language "Special:EditPage/Template:Unified Modeling Language")

[Unified Modeling Language](/wiki/Unified_Modeling_Language "Unified Modeling Language")

Actors

- _Organizations_
  - [Object Management Group](/wiki/Object_Management_Group "Object Management Group")
  - [UML Partners](/wiki/UML_Partners "UML Partners")
- _Persons_
  - [Grady Booch](/wiki/Grady_Booch "Grady Booch")
  - [Ivar Jacobson](/wiki/Ivar_Jacobson "Ivar Jacobson")
  - [James Rumbaugh](/wiki/James_Rumbaugh "James Rumbaugh")

[![](//upload.wikimedia.org/wikipedia/commons/thumb/1/1d/Use_case_restaurant_model.svg/100px-Use_case_restaurant_model.svg.png)](/wiki/Use_case_diagram "Use case diagram")

Concepts

Object oriented

- [Object-oriented programming](/wiki/Object-oriented_programming "Object-oriented programming")
- Object-oriented analysis and design
- [Object-oriented modeling](/wiki/Object-oriented_modeling "Object-oriented modeling")

Structure

- [Actor](/wiki/Actor_(UML) "Actor (UML)")
- [Attribute](/wiki/Attribute_(computing) "Attribute (computing)")
- [Artifact](/wiki/Artifact_(UML) "Artifact (UML)")
- [Class](/wiki/Class_(computer_programming) "Class (computer programming)")
- [Component](/wiki/Component_(UML) "Component (UML)")
- [Interface](/wiki/Protocol_(object-oriented_programming) "Protocol (object-oriented programming)")
- [Object](/wiki/Object_(computer_science) "Object (computer science)")
- [Package](/wiki/Package_(UML) "Package (UML)")
- [Profile diagram](/wiki/Profile_diagram "Profile diagram")

Behavior

- [Activity](/wiki/Activity_(UML) "Activity (UML)")
- [Event](/wiki/Event_(UML) "Event (UML)")
- [Message](/wiki/Message_passing "Message passing")
- [Method](/wiki/Method_(computer_programming) "Method (computer programming)")
- [State](/wiki/State_(computer_science) "State (computer science)")
- [Use case](/wiki/Use_case "Use case")

Relationships

- [Association](/wiki/Association_(object-oriented_programming) "Association (object-oriented programming)")
- [Composition](/wiki/Object_composition "Object composition")
- [Dependency](/wiki/Coupling_(computer_programming) "Coupling (computer programming)")
- [Generalization](/wiki/Generalization "Generalization") (or [Inheritance](/wiki/Inheritance_(object-oriented_programming) "Inheritance (object-oriented programming)"))

Extensibility

- [Profile](/wiki/Profile_(UML) "Profile (UML)")
- [Stereotype](/wiki/Stereotype_(UML) "Stereotype (UML)")

Other

- [Multiplicity](/wiki/Class_diagram#Multiplicity "Class diagram")

Diagrams

Structure

- [Class](/wiki/Class_diagram "Class diagram")
- [Component](/wiki/Component_diagram "Component diagram")
- [Composite structure](/wiki/Composite_structure_diagram "Composite structure diagram")
- [Deployment](/wiki/Deployment_diagram "Deployment diagram")
- [Object](/wiki/Object_diagram "Object diagram")
- [Package](/wiki/Package_diagram "Package diagram")

Behaviour

- [Activity](/wiki/Activity_diagram "Activity diagram")
- [State Machine](/wiki/UML_state_machine "UML state machine")
- [Use case](/wiki/Use_case_diagram "Use case diagram")

Interaction

- [Communications](/wiki/Communication_diagram "Communication diagram")
- [Sequence](/wiki/Sequence_diagram "Sequence diagram")
- [Interaction overview](/wiki/Interaction_overview_diagram "Interaction overview diagram")
- [Timing](/wiki/Timing_diagram_(Unified_Modeling_Language) "Timing diagram (Unified Modeling Language)")

Derived languages

- [Systems Modeling Language (SysML)](/wiki/Systems_Modeling_Language "Systems Modeling Language")
- [UML eXchange Format (UXF)](/wiki/UXF "UXF")
- [XML Metadata Interchange (XMI)](/wiki/XML_Metadata_Interchange "XML Metadata Interchange")
- [Executable UML (xUML)](/wiki/Executable_UML "Executable UML")

Other topics

- [Glossary of UML terms](/wiki/Glossary_of_Unified_Modeling_Language_terms "Glossary of Unified Modeling Language terms")
- [Rational Unified Process](/wiki/Rational_Unified_Process "Rational Unified Process")
- [List of Unified Modeling Language tools](/wiki/List_of_Unified_Modeling_Language_tools "List of Unified Modeling Language tools")
- [Object Modeling in Color](/wiki/Object_Modeling_in_Color "Object Modeling in Color")

Retrieved from " [https://en.wikipedia.org/w/index.php?title=Object-oriented\_analysis\_and\_design&oldid=1230588445](https://en.wikipedia.org/w/index.php?title=Object-oriented_analysis_and_design&oldid=1230588445)"

[Categories](/wiki/Help:Category "Help:Category"):

- [Object-oriented programming](/wiki/Category:Object-oriented_programming "Category:Object-oriented programming")
- [Software design](/wiki/Category:Software_design "Category:Software design")

Hidden categories:

- [Articles with short description](/wiki/Category:Articles_with_short_description "Category:Articles with short description")
- [Short description is different from Wikidata](/wiki/Category:Short_description_is_different_from_Wikidata "Category:Short description is different from Wikidata")
- [Articles needing additional references from November 2019](/wiki/Category:Articles_needing_additional_references_from_November_2019 "Category:Articles needing additional references from November 2019")
- [All articles needing additional references](/wiki/Category:All_articles_needing_additional_references "Category:All articles needing additional references")
- [Wikipedia articles in need of updating from July 2023](/wiki/Category:Wikipedia_articles_in_need_of_updating_from_July_2023 "Category:Wikipedia articles in need of updating from July 2023")
- [All Wikipedia articles in need of updating](/wiki/Category:All_Wikipedia_articles_in_need_of_updating "Category:All Wikipedia articles in need of updating")
- [Articles needing cleanup from January 2014](/wiki/Category:Articles_needing_cleanup_from_January_2014 "Category:Articles needing cleanup from January 2014")
- [All pages needing cleanup](/wiki/Category:All_pages_needing_cleanup "Category:All pages needing cleanup")
- [Cleanup tagged articles with a reason field from January 2014](/wiki/Category:Cleanup_tagged_articles_with_a_reason_field_from_January_2014 "Category:Cleanup tagged articles with a reason field from January 2014")
- [Wikipedia pages needing cleanup from January 2014](/wiki/Category:Wikipedia_pages_needing_cleanup_from_January_2014 "Category:Wikipedia pages needing cleanup from January 2014")

- This page was last edited on 23 June 2024, at 15:53 (UTC).
- Text is available under the [Creative Commons Attribution-ShareAlike License 4.0](//en.wikipedia.org/wiki/Wikipedia:Text_of_the_Creative_Commons_Attribution-ShareAlike_4.0_International_License);
additional terms may apply. By using this site, you agree to the [Terms of Use](//foundation.wikimedia.org/wiki/Special:MyLanguage/Policy:Terms_of_Use) and [Privacy Policy](//foundation.wikimedia.org/wiki/Special:MyLanguage/Policy:Privacy_policy). Wikipedia® is a registered trademark of the [Wikimedia Foundation, Inc.](//wikimediafoundation.org/), a non-profit organization.

- [Privacy policy](https://foundation.wikimedia.org/wiki/Special:MyLanguage/Policy:Privacy_policy)
- [About Wikipedia](/wiki/Wikipedia:About)
- [Disclaimers](/wiki/Wikipedia:General_disclaimer)
- [Contact Wikipedia](//en.wikipedia.org/wiki/Wikipedia:Contact_us)
- [Code of Conduct](https://foundation.wikimedia.org/wiki/Special:MyLanguage/Policy:Universal_Code_of_Conduct)
- [Developers](https://developer.wikimedia.org)
- [Statistics](https://stats.wikimedia.org/#/en.wikipedia.org)
- [Cookie statement](https://foundation.wikimedia.org/wiki/Special:MyLanguage/Policy:Cookie_statement)
- [Mobile view](//en.m.wikipedia.org/w/index.php?title=Object-oriented_analysis_and_design&mobileaction=toggle_view_mobile)

- [![Wikimedia Foundation](/static/images/footer/wikimedia-button.svg)](https://wikimediafoundation.org/)
- [![Powered by MediaWiki](/w/resources/assets/poweredby_mediawiki.svg)](https://www.mediawiki.org/)