The Unified Modeling Language (UML) is the industry standard for visualizing, specifying, constructing, and documenting the artifacts of software systems. However, to effectively model complex systems, one must first understand the foundational vocabulary of the language.
In UML, the architecture is built upon specific "building blocks." The two most fundamental categories of these building blocks are Structural Things and Behavioral Things. Understanding the distinction between the two—essentially the difference between what a system is and what a system does—is critical for creating accurate, comprehensive, and communicative software models. This guide will explore these core concepts, illustrate them with practical examples, and demonstrate how they work together to form a complete system design.
Structural things represent the static parts of a UML model. If UML were a natural language, structural things would be the nouns. They describe the physical or conceptual organization of the system at a given point in time, independent of the system's execution.
There are seven primary kinds of structural things:

Classes: The most common structural element. They are descriptions of sets of objects that share the same attributes, operations, relationships, and semantics.
Interfaces: Collections of operations that specify a specific service or contract provided by a class or component. They define what must be done, not how.
Collaborations: Societies of roles and other elements that work together to provide cooperative behavior. They define the context in which interactions occur.
Use Cases: Descriptions of sequences of actions a system performs that yield an observable result of value to a specific actor. (Note: While they describe actions, they are modeled as static classifiers in the UML repository).
Active Classes: Special classes whose objects own their own processes or threads. Unlike regular classes, they can initiate control activity independently.
Components: Physical, replaceable parts of a system that package and realize a set of interfaces. Examples include source code files, binaries, executables, or libraries.
Nodes: Physical elements that exist at runtime. They represent computational resources with processing power and memory, such as physical servers, IoT devices, or cloud instances.
Behavioral things represent the dynamic parts of UML models. They are the verbs of the UML vocabulary. While structural things define the system's anatomy, behavioral things define its physiology—describing how the system's elements interact, change state, and execute over time and space.
There are two primary kinds of behavioral things:

Interactions: Behaviors comprising a set of messages exchanged among a set of objects within a particular collaboration or context to accomplish a specific purpose. They highlight the flow of control and data.
State Machines: Behaviors that specify the sequences of states an object (or system) goes through during its lifetime in response to external or internal events. They are crucial for modeling the lifecycle of complex objects.
Structural and behavioral building blocks are not isolated; they are deeply interrelated. Behavioral elements require structural elements to act upon them. For example, a State Machine (behavioral) defines the lifecycle of a specific Class (structural). Similarly, an Interaction (behavioral) maps out the messages passed between specific Objects or Components (structural). You cannot fully describe a system's behavior without defining its structure, and a structure without behavior is essentially a lifeless blueprint.
To truly understand these concepts, it helps to see them in practice. Below are PlantUML code examples demonstrating both structural and behavioral building blocks.
This diagram illustrates the static architecture of a payment processing system. It shows an Interface, a Class realizing it, a physical Component (executable), and the Node (hardware) it runs on.

@startuml structural_example
allowmixing
title Structural Things: Static Architecture
' --- Interfaces ---
interface "PaymentGatewayInterface" as PGW {
+ authorize(amount: Double): Boolean
+ capture(transactionId: String): Boolean
}
' --- Classes ---
class "StripePaymentProcessor" as SPP {
- apiKey: String
+ authorize(amount: Double): Boolean
+ capture(transactionId: String): Boolean
}
' --- Components & Nodes ---
node "AWS EC2 Instance (us-east-1)" as AWS_Node {
component "PaymentService.exe" as PayComp
}
' --- Relationships ---
SPP ..|> PGW : Realizes
PayComp ..> PGW : Depends on
PayComp --> SPP : Instantiates
@enduml
This example shows the dynamic behavior of the system. The first part is a State Machine showing the lifecycle of an Order. The second part is an Interaction (Sequence Diagram) showing the messages exchanged to process that order.

@startuml behavioral_example_1
title Behavioral Things: Dynamic Execution - State Machine
' ==========================================
' BEHAVIORAL THING 1: STATE MACHINE
' ==========================================
state "Order Lifecycle (State Machine)" as SM {
[*] --> Pending
Pending --> Processing : submitOrder()
Processing --> Shipped : dispatch()
Shipped --> Delivered : confirmDelivery()
Delivered --> [*]
Processing --> Cancelled : cancelOrder()
Cancelled --> [*]
}
@enduml
@startuml behavioral_example_2
title Behavioral Things: Dynamic Execution - Sequence Diagram
' ==========================================
' BEHAVIORAL THING 2: INTERACTION
' ==========================================
actor Customer
participant "Web UI" as UI
participant "OrderSystem" as OS
participant "PaymentGateway" as PG
Customer -> UI : Click "Checkout"
UI -> OS : submitOrder(cart)
activate OS
OS -> PG : authorize(totalAmount)
activate PG
PG --> OS : return transactionId
deactivate PG
OS --> UI : return OrderConfirmed
deactivate OS
UI --> Customer : Display "Order Placed!"
@enduml
For a quick reference, here is a breakdown of the core distinctions between the two primary building blocks:
| Feature | Structural Things | Behavioral Things |
|---|---|---|
| Metaphor | The "Nouns" of the model. | The "Verbs" of the model. |
| Focus | Static organization, architecture, and structure. | Dynamic behavior, execution, and dynamics. |
| Representation | Represents conceptual or physical elements of the system. | Represents behavior over time and space. |
| Primary Examples | Classes, interfaces, components, nodes, use cases. | Interactions and state machines. |
| Question Answered | What is the system made of? | What does the system do, and how does it change? |
Mastering the Unified Modeling Language requires more than just memorizing diagram syntax; it requires a deep understanding of the language's foundational building blocks. By categorizing model elements into Structural Things (the static nouns) and Behavioral Things (the dynamic verbs), software architects and developers can systematically break down complex systems into manageable, comprehensible models.
Remember that a successful software model relies on the harmony between these two categories. The structural elements provide the necessary framework and constraints, while the behavioral elements breathe life into that framework, detailing how the system responds to events and interacts with its environment. By leveraging both effectively, you can ensure your UML models are not just visually appealing, but highly accurate, communicative, and valuable tools for software engineering.