Sign Up

Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.

Have an account? Sign In

Have an account? Sign In Now

Sign In

Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.

Sign Up Here

Forgot Password?

Don't have account, Sign Up Here

Forgot Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Have an account? Sign In Now

Sorry, you do not have permission to ask a question, You must login to ask a question.

Forgot Password?

Need An Account, Sign Up Here

Please type your username.

Please type your E-Mail.

Please choose an appropriate title for the post.

Please choose the appropriate section so your post can be easily searched.

Please choose suitable Keywords Ex: post, video.

Browse

Need An Account, Sign Up Here

Please briefly explain why you feel this question should be reported.

Please briefly explain why you feel this answer should be reported.

Please briefly explain why you feel this user should be reported.

Sign InSign Up

Querify Question Shop: Explore Expert Solutions and Unique Q&A Merchandise

Querify Question Shop: Explore Expert Solutions and Unique Q&A Merchandise Logo Querify Question Shop: Explore Expert Solutions and Unique Q&A Merchandise Logo

Querify Question Shop: Explore Expert Solutions and Unique Q&A Merchandise Navigation

  • Home
  • About Us
  • Contact Us
Search
Ask A Question

Mobile menu

Close
Ask a Question
  • Home
  • About Us
  • Contact Us
Home/ Questions/Q 2650

Querify Question Shop: Explore Expert Solutions and Unique Q&A Merchandise Latest Questions

Author
  • 61k
Author
Asked: November 26, 20242024-11-26T07:23:08+00:00 2024-11-26T07:23:08+00:00

Code Smell 237 – Attribute Definitions

  • 61k

You read a class and the first thing you notice are the arbitrary properties

TL;DR: Never focus on implementation. Focus on behavior instead.

Problems

  • Coupling to implementation

  • Lack of Separation between the 'What' and the 'How'

  • Encapsulation and Information Hiding violations

  • Lack of Abstraction

  • Unclear separation of Interfaces/Protocol

  • Coupled Testability

  • Debugging using inspectors instead of sending messages to objects.

Solutions

  1. Redesign your favorite programming language

  2. Ignore the (accidental) implementation and study the available protocol

Context

For historical reasons, most class-based programming languages declare the attributes first and the public protocol after.

This is a problem if you need to understand what a class does at first sight.

Some languages implemented Header files (often denoted by the .h extension).

They contain declarations of functions, classes, variables, and other constructs without providing the full implementation.

These files serve as a way to share information about the structure and interface of a program or library across multiple source code files.

Sample Code

Wrong

public class ShoppingCart {      // This is Accidental     private List<Item> items;      // This is Also Accidental     // And irrelevant to cart usage     public ShoppingCart() {         this.items = new ArrayList<>();     }      public void addItem(Item item) {         items.add(item);      }      public void removeItem(Item item) {         // Error handling is irrelevant for the example         items.remove(item);     }      public double calculateTotal() {         double total = 0.0;         for (Item item : items) {             total += item.getPrice();         }         return total;     } } 
Enter fullscreen mode Exit fullscreen mode

Right

public class ShoppingCart {      // Focus on public behavior only         // This is invalid in Java :(     public ShoppingCart() { }      public void addItem(Item item) { }       public void removeItem(Item item) { }          public double calculateTotal() {} } 
Enter fullscreen mode Exit fullscreen mode

Detection

[X] Manual

This is language smell. You cannot detect it.

Exceptions

  • This smell applies only to languages requiring explicit attribute definitions like Java, C#, PHP, etc.

Dynamically-typed languages like Python or JavaScript do not require explicit attribute definition.

In these languages, you can create attributes on the fly without declaring them in the class definition.

Tags

  • Hierarchies

Level

[X] Beginner

AI Assistants

Most AI Assistants generate code with this smell.

Try prompting: 'Generate a class representing a House in Java'

Conclusion

You cannot change the language you use, still, according to The Sapir-Whorf hypothesis the structure and vocabulary of a language can shape or influence how its speakers perceive and think about the real world using the MAPPER.

Relations

mcsee

Code Smell 123 – Mixed 'What' and 'How'

Maxi Contieri ・ Mar 22 '22

More Info

Wikipedia Header Files

Wikipedia Sapir-Whorf Hypothesis

Disclaimer

Code Smells are my opinion.

Credits

Photo by K8 on Unsplash


Tests should be coupled to the behavior of code and decoupled from the structure of code

Kent Beck

mcsee

Software Engineering Great Quotes

Maxi Contieri ・ Dec 28 '20

#codenewbie #programming #quotes #software


This article is part of the CodeSmell Series.

mcsee

How to Find the Stinky parts of your Code

Maxi Contieri ・ May 21 '21

#codenewbie #tutorial #codequality #beginners

beginnersjavascriptprogrammingwebdev
  • 0 0 Answers
  • 0 Views
  • 0 Followers
  • 0
Share
  • Facebook
  • Report

Leave an answer
Cancel reply

You must login to add an answer.

Forgot Password?

Need An Account, Sign Up Here

Sidebar

Ask A Question

Stats

  • Questions 4k
  • Answers 0
  • Best Answers 0
  • Users 2k
  • Popular
  • Answers
  • Author

    ES6 - A beginners guide - Template Literals

    • 0 Answers
  • Author

    Understanding Higher Order Functions in JavaScript.

    • 0 Answers
  • Author

    Build a custom video chat app with Daily and Vue.js

    • 0 Answers

Top Members

Samantha Carter

Samantha Carter

  • 0 Questions
  • 20 Points
Begginer
Ella Lewis

Ella Lewis

  • 0 Questions
  • 20 Points
Begginer
Isaac Anderson

Isaac Anderson

  • 0 Questions
  • 20 Points
Begginer

Explore

  • Home
  • Add group
  • Groups page
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Users
  • Help

Footer

Querify Question Shop: Explore Expert Solutions and Unique Q&A Merchandise

Querify Question Shop: Explore, ask, and connect. Join our vibrant Q&A community today!

About Us

  • About Us
  • Contact Us
  • All Users

Legal Stuff

  • Terms of Use
  • Privacy Policy
  • Cookie Policy

Help

  • Knowledge Base
  • Support

Follow

© 2022 Querify Question. All Rights Reserved

Insert/edit link

Enter the destination URL

Or link to existing content

    No search term specified. Showing recent items. Search or use up and down arrow keys to select an item.